Exposed media file provider configuration method (#13294)
This is required for consumers that intend to use WithCustomMiddleware instead of WithMiddleware, as otherwise they are forced to re-implement this code
This commit is contained in:
@@ -1,14 +1,8 @@
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.FileProviders;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Web.Common.Media;
|
||||
using Umbraco.Extensions;
|
||||
using IHostingEnvironment = Umbraco.Cms.Core.Hosting.IHostingEnvironment;
|
||||
|
||||
namespace Umbraco.Cms.Web.Common.ApplicationBuilder;
|
||||
|
||||
@@ -77,24 +71,7 @@ public class UmbracoApplicationBuilder : IUmbracoApplicationBuilder, IUmbracoEnd
|
||||
{
|
||||
UseUmbracoCoreMiddleware();
|
||||
|
||||
// Get media file provider and request path/URL
|
||||
MediaFileManager mediaFileManager = AppBuilder.ApplicationServices.GetRequiredService<MediaFileManager>();
|
||||
if (mediaFileManager.FileSystem.TryCreateFileProvider(out IFileProvider? mediaFileProvider))
|
||||
{
|
||||
GlobalSettings globalSettings =
|
||||
AppBuilder.ApplicationServices.GetRequiredService<IOptions<GlobalSettings>>().Value;
|
||||
IHostingEnvironment? hostingEnvironment = AppBuilder.ApplicationServices.GetService<IHostingEnvironment>();
|
||||
var mediaRequestPath = hostingEnvironment?.ToAbsolute(globalSettings.UmbracoMediaPath);
|
||||
|
||||
// Configure custom file provider for media
|
||||
IWebHostEnvironment? webHostEnvironment = AppBuilder.ApplicationServices.GetService<IWebHostEnvironment>();
|
||||
if (webHostEnvironment is not null)
|
||||
{
|
||||
webHostEnvironment.WebRootFileProvider =
|
||||
webHostEnvironment.WebRootFileProvider.ConcatComposite(
|
||||
new MediaPrependBasePathFileProvider(mediaRequestPath, mediaFileProvider));
|
||||
}
|
||||
}
|
||||
AppBuilder.UseUmbracoMediaFileProvider();
|
||||
|
||||
AppBuilder.UseStaticFiles();
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using Dazinator.Extensions.FileProviders.PrependBasePath;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.FileProviders;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Serilog.Context;
|
||||
@@ -9,11 +10,14 @@ using StackExchange.Profiling;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.Extensions;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.Logging.Serilog.Enrichers;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Web.Common.ApplicationBuilder;
|
||||
using Umbraco.Cms.Web.Common.Media;
|
||||
using Umbraco.Cms.Web.Common.Middleware;
|
||||
using Umbraco.Cms.Web.Common.Plugins;
|
||||
using IHostingEnvironment = Umbraco.Cms.Core.Hosting.IHostingEnvironment;
|
||||
|
||||
namespace Umbraco.Extensions;
|
||||
|
||||
@@ -110,8 +114,6 @@ public static class ApplicationBuilderExtensions
|
||||
/// <summary>
|
||||
/// Allow static file access for App_Plugins folders
|
||||
/// </summary>
|
||||
/// <param name="app"></param>
|
||||
/// <returns></returns>
|
||||
public static IApplicationBuilder UseUmbracoPluginsStaticFiles(this IApplicationBuilder app)
|
||||
{
|
||||
IHostEnvironment hostingEnvironment = app.ApplicationServices.GetRequiredService<IHostEnvironment>();
|
||||
@@ -137,4 +139,31 @@ public static class ApplicationBuilderExtensions
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configure custom umbraco file provider for media
|
||||
/// </summary>
|
||||
public static IApplicationBuilder UseUmbracoMediaFileProvider(this IApplicationBuilder app)
|
||||
{
|
||||
// Get media file provider and request path/URL
|
||||
MediaFileManager mediaFileManager = app.ApplicationServices.GetRequiredService<MediaFileManager>();
|
||||
if (mediaFileManager.FileSystem.TryCreateFileProvider(out IFileProvider? mediaFileProvider))
|
||||
{
|
||||
GlobalSettings globalSettings =
|
||||
app.ApplicationServices.GetRequiredService<IOptions<GlobalSettings>>().Value;
|
||||
IHostingEnvironment? hostingEnvironment = app.ApplicationServices.GetService<IHostingEnvironment>();
|
||||
var mediaRequestPath = hostingEnvironment?.ToAbsolute(globalSettings.UmbracoMediaPath);
|
||||
|
||||
// Configure custom file provider for media
|
||||
IWebHostEnvironment? webHostEnvironment = app.ApplicationServices.GetService<IWebHostEnvironment>();
|
||||
if (webHostEnvironment is not null)
|
||||
{
|
||||
webHostEnvironment.WebRootFileProvider =
|
||||
webHostEnvironment.WebRootFileProvider.ConcatComposite(
|
||||
new MediaPrependBasePathFileProvider(mediaRequestPath, mediaFileProvider));
|
||||
}
|
||||
}
|
||||
|
||||
return app;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user