public override void ConfigureServices(IServiceCollection services) { services.AddSingleton <IAnchorTag, MediaAnchorTag>(); services.Configure <TemplateOptions>(o => { o.MemberAccessStrategy.Register <DisplayMediaFieldViewModel>(); o.MemberAccessStrategy.Register <Anchor>(); o.Filters.AddFilter("img_tag", MediaFilters.ImgTag); }) .AddLiquidFilter <AssetUrlFilter>("asset_url") .AddLiquidFilter <ResizeUrlFilter>("resize_url"); services.AddTransient <IConfigureOptions <MediaOptions>, MediaOptionsConfiguration>(); services.AddSingleton <IMediaFileProvider>(serviceProvider => { var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var options = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value; var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, options.AssetsPath); if (!Directory.Exists(mediaPath)) { Directory.CreateDirectory(mediaPath); } return(new MediaFileProvider(options.AssetsRequestPath, mediaPath)); }); services.AddSingleton <IStaticFileProvider, IMediaFileProvider>(serviceProvider => serviceProvider.GetRequiredService <IMediaFileProvider>() ); services.AddSingleton <IMediaFileStore>(serviceProvider => { var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var mediaOptions = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value; var mediaEventHandlers = serviceProvider.GetServices <IMediaEventHandler>(); var mediaCreatingEventHandlers = serviceProvider.GetServices <IMediaCreatingEventHandler>(); var logger = serviceProvider.GetRequiredService <ILogger <DefaultMediaFileStore> >(); var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, mediaOptions.AssetsPath); var fileStore = new FileSystemStore(mediaPath); var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, mediaOptions.AssetsRequestPath); var originalPathBase = serviceProvider.GetRequiredService <IHttpContextAccessor>() .HttpContext?.Features.Get <ShellContextFeature>()?.OriginalPathBase ?? null; if (originalPathBase.HasValue) { mediaUrlBase = fileStore.Combine(originalPathBase.Value, mediaUrlBase); } return(new DefaultMediaFileStore(fileStore, mediaUrlBase, mediaOptions.CdnBaseUrl, mediaEventHandlers, mediaCreatingEventHandlers, logger)); }); services.AddScoped <IPermissionProvider, Permissions>(); services.AddScoped <IAuthorizationHandler, ManageMediaFolderAuthorizationHandler>(); services.AddScoped <INavigationProvider, AdminMenu>(); // ImageSharp // Add ImageSharp Configuration first, to override ImageSharp defaults. services.AddTransient <IConfigureOptions <ImageSharpMiddlewareOptions>, MediaImageSharpConfiguration>(); services.AddImageSharp() .RemoveProvider <PhysicalFileSystemProvider>() .AddProvider <MediaResizingFileProvider>() .AddProcessor <ImageVersionProcessor>() .AddProcessor <TokenCommandProcessor>(); services.AddScoped <MediaTokenSettingsUpdater>(); services.AddScoped <IMediaTokenService, MediaTokenService>(); services.AddTransient <IConfigureOptions <MediaTokenOptions>, MediaTokenOptionsConfiguration>(); services.AddScoped <IFeatureEventHandler>(sp => sp.GetRequiredService <MediaTokenSettingsUpdater>()); services.AddScoped <IModularTenantEvents>(sp => sp.GetRequiredService <MediaTokenSettingsUpdater>()); // Media Field services.AddContentField <MediaField>() .UseDisplayDriver <MediaFieldDisplayDriver>(); services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>(); services.AddScoped <AttachedMediaFieldFileService, AttachedMediaFieldFileService>(); services.AddScoped <IContentHandler, AttachedMediaFieldContentHandler>(); services.AddScoped <IModularTenantEvents, TempDirCleanerService>(); services.AddScoped <IDataMigration, Migrations>(); services.AddRecipeExecutionStep <MediaStep>(); // MIME types services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>(); services.AddTagHelpers <ImageTagHelper>(); services.AddTagHelpers <ImageResizeTagHelper>(); services.AddTagHelpers <AnchorTagHelper>(); // Media Profiles services.AddScoped <MediaProfilesManager>(); services.AddScoped <IMediaProfileService, MediaProfileService>(); services.AddRecipeExecutionStep <MediaProfileStep>(); // Media Name Normalizer services.AddScoped <IMediaNameNormalizerService, NullMediaNameNormalizerService>(); services.AddScoped <IUserAssetFolderNameProvider, DefaultUserAssetFolderNameProvider>(); }
public override void ConfigureServices(IServiceCollection services) { services.AddSingleton <IMediaFileStore>(serviceProvider => { var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var mediaPath = GetMediaPath(shellOptions.Value, shellSettings); var fileStore = new FileSystemStore(mediaPath); var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, AssetsUrlPrefix); return(new MediaFileStore(fileStore, mediaUrlBase)); }); services.AddScoped <IPermissionProvider, Permissions>(); services.AddScoped <INavigationProvider, AdminMenu>(); services.AddSingleton <ContentPart, ImageMediaPart>(); services.AddMedia(); services.AddLiquidFilter <MediaUrlFilter>("asset_url"); services.AddLiquidFilter <ResizeUrlFilter>("resize_url"); services.AddLiquidFilter <ImageTagFilter>("img_tag"); // ImageSharp services.AddImageSharpCore( options => { options.Configuration = Configuration.Default; options.MaxBrowserCacheDays = 7; options.MaxCacheDays = 365; options.CachedNameLength = 12; options.OnValidate = validation => { // Force some parameters to prevent disk filling. // For more advanced resize parameters the usage of profiles will be necessary. // This can be done with a custom IImageWebProcessor implementation that would // accept profile names. validation.Commands.Remove(ResizeWebProcessor.Compand); validation.Commands.Remove(ResizeWebProcessor.Sampler); validation.Commands.Remove(ResizeWebProcessor.Xy); validation.Commands.Remove(ResizeWebProcessor.Anchor); validation.Commands.Remove(BackgroundColorWebProcessor.Color); if (validation.Commands.Count > 0) { if (!validation.Commands.ContainsKey(ResizeWebProcessor.Mode)) { validation.Commands[ResizeWebProcessor.Mode] = "max"; } if (validation.Commands.TryGetValue(ResizeWebProcessor.Width, out var width)) { if (Int32.TryParse(width, out var parsedWidth)) { if (Array.BinarySearch <int>(Sizes, parsedWidth) == -1) { validation.Commands.Clear(); } } else { validation.Commands.Remove(ResizeWebProcessor.Width); } } if (validation.Commands.TryGetValue(ResizeWebProcessor.Height, out var height)) { if (Int32.TryParse(height, out var parsedHeight)) { if (Array.BinarySearch <int>(Sizes, parsedHeight) == -1) { validation.Commands.Clear(); } } else { validation.Commands.Remove(ResizeWebProcessor.Height); } } } }; options.OnProcessed = _ => { }; options.OnPrepareResponse = _ => { }; }) .SetRequestParser <QueryCollectionRequestParser>() .SetBufferManager <PooledBufferManager>() .SetCacheHash <CacheHash>() .SetAsyncKeyLock <AsyncKeyLock>() .SetCache <PhysicalFileSystemCache>() .AddResolver <MediaFileSystemResolver>() .AddProcessor <ResizeWebProcessor>(); // Media Field services.AddSingleton <ContentField, MediaField>(); services.AddScoped <IContentFieldDisplayDriver, MediaFieldDisplayDriver>(); services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>(); services.AddRecipeExecutionStep <MediaStep>(); // MIME types services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>(); services.AddTagHelpers <ImageTagHelper>(); services.AddTagHelpers <ImageResizeTagHelper>(); }
public override void ConfigureServices(IServiceCollection services) { services.AddTransient <IConfigureOptions <MediaOptions>, MediaOptionsConfiguration>(); services.AddSingleton <IMediaFileProvider>(serviceProvider => { var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var options = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value; var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, options.AssetsPath); if (!Directory.Exists(mediaPath)) { Directory.CreateDirectory(mediaPath); } return(new MediaFileProvider(options.AssetsRequestPath, mediaPath)); }); services.AddSingleton <IStaticFileProvider, IMediaFileProvider>(serviceProvider => serviceProvider.GetRequiredService <IMediaFileProvider>() ); services.AddSingleton <IMediaFileStore>(serviceProvider => { var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var mediaOptions = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value; var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, mediaOptions.AssetsPath); var fileStore = new FileSystemStore(mediaPath); var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, mediaOptions.AssetsRequestPath); var originalPathBase = serviceProvider.GetRequiredService <IHttpContextAccessor>() .HttpContext?.Features.Get <ShellContextFeature>()?.OriginalPathBase ?? null; if (originalPathBase.HasValue) { mediaUrlBase = fileStore.Combine(originalPathBase.Value, mediaUrlBase); } return(new DefaultMediaFileStore(fileStore, mediaUrlBase, mediaOptions.CdnBaseUrl)); }); services.AddScoped <IPermissionProvider, Permissions>(); services.AddScoped <IAuthorizationHandler, AttachedMediaFieldsFolderAuthorizationHandler>(); services.AddScoped <INavigationProvider, AdminMenu>(); services.AddContentPart <ImageMediaPart>(); services.AddMedia(); services.AddLiquidFilter <MediaUrlFilter>("asset_url"); services.AddLiquidFilter <ResizeUrlFilter>("resize_url"); services.AddLiquidFilter <ImageTagFilter>("img_tag"); // ImageSharp // Add ImageSharp Configuration first, to override ImageSharp defaults. services.AddTransient <IConfigureOptions <ImageSharpMiddlewareOptions>, MediaImageSharpConfiguration>(); services.AddImageSharpCore() .SetRequestParser <QueryCollectionRequestParser>() .SetMemoryAllocator <ArrayPoolMemoryAllocator>() .SetCache <PhysicalFileSystemCache>() .SetCacheHash <CacheHash>() .AddProvider <MediaResizingFileProvider>() .AddProcessor <ResizeWebProcessor>() .AddProcessor <FormatWebProcessor>() .AddProcessor <ImageVersionProcessor>() .AddProcessor <BackgroundColorWebProcessor>(); // Media Field services.AddContentField <MediaField>(); services.AddScoped <IContentFieldDisplayDriver, MediaFieldDisplayDriver>(); services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>(); services.AddScoped <AttachedMediaFieldFileService, AttachedMediaFieldFileService>(); services.AddScoped <IContentHandler, AttachedMediaFieldContentHandler>(); services.AddScoped <IModularTenantEvents, TempDirCleanerService>(); services.AddScoped <IDataMigration, Migrations>(); services.AddRecipeExecutionStep <MediaStep>(); // MIME types services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>(); services.AddTagHelpers <ImageTagHelper>(); services.AddTagHelpers <ImageResizeTagHelper>(); }
public override void ConfigureServices(IServiceCollection services) { services.AddSingleton <IMediaFileProvider>(serviceProvider => { var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var mediaPath = GetMediaPath(shellOptions.Value, shellSettings); if (!Directory.Exists(mediaPath)) { Directory.CreateDirectory(mediaPath); } return(new MediaFileProvider(AssetsRequestPath, mediaPath)); }); services.AddSingleton <IStaticFileProvider>(serviceProvider => { return(serviceProvider.GetRequiredService <IMediaFileProvider>()); }); services.AddSingleton <IMediaFileStore>(serviceProvider => { var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var mediaPath = GetMediaPath(shellOptions.Value, shellSettings); var fileStore = new FileSystemStore(mediaPath); var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, AssetsRequestPath); var originalPathBase = serviceProvider.GetRequiredService <IHttpContextAccessor>() .HttpContext?.Features.Get <ShellContextFeature>()?.OriginalPathBase ?? null; if (originalPathBase.HasValue) { mediaUrlBase = fileStore.Combine(originalPathBase, mediaUrlBase); } return(new MediaFileStore(fileStore, mediaUrlBase)); }); services.AddScoped <IPermissionProvider, Permissions>(); services.AddScoped <IAuthorizationHandler, AttachedMediaFieldsFolderAuthorizationHandler>(); services.AddScoped <INavigationProvider, AdminMenu>(); services.AddSingleton <ContentPart, ImageMediaPart>(); services.AddMedia(); services.AddLiquidFilter <MediaUrlFilter>("asset_url"); services.AddLiquidFilter <ResizeUrlFilter>("resize_url"); services.AddLiquidFilter <ImageTagFilter>("img_tag"); // ImageSharp services.AddImageSharpCore(options => { options.Configuration = Configuration.Default; options.MaxBrowserCacheDays = _maxBrowserCacheDays; options.MaxCacheDays = _maxCacheDays; options.CachedNameLength = 12; options.OnParseCommands = validation => { // Force some parameters to prevent disk filling. // For more advanced resize parameters the usage of profiles will be necessary. // This can be done with a custom IImageWebProcessor implementation that would // accept profile names. validation.Commands.Remove(ResizeWebProcessor.Compand); validation.Commands.Remove(ResizeWebProcessor.Sampler); validation.Commands.Remove(ResizeWebProcessor.Xy); validation.Commands.Remove(ResizeWebProcessor.Anchor); validation.Commands.Remove(BackgroundColorWebProcessor.Color); if (validation.Commands.Count > 0) { if (!validation.Commands.ContainsKey(ResizeWebProcessor.Mode)) { validation.Commands[ResizeWebProcessor.Mode] = "max"; } } }; options.OnProcessed = _ => { }; options.OnPrepareResponse = _ => { }; }) .SetRequestParser <QueryCollectionRequestParser>() .SetMemoryAllocator <ArrayPoolMemoryAllocator>() .SetCache <PhysicalFileSystemCache>() .SetCacheHash <CacheHash>() .AddProvider <MediaResizingFileProvider>() .AddProcessor <ResizeWebProcessor>() .AddProcessor <FormatWebProcessor>() .AddProcessor <ImageVersionProcessor>() .AddProcessor <BackgroundColorWebProcessor>(); // Media Field services.AddSingleton <ContentField, MediaField>(); services.AddScoped <IContentFieldDisplayDriver, MediaFieldDisplayDriver>(); services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>(); services.AddScoped <AttachedMediaFieldFileService, AttachedMediaFieldFileService>(); services.AddScoped <IContentHandler, AttachedMediaFieldContentHandler>(); services.AddScoped <IModularTenantEvents, TempDirCleanerService>(); services.AddRecipeExecutionStep <MediaStep>(); // MIME types services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>(); services.AddTagHelpers <ImageTagHelper>(); services.AddTagHelpers <ImageResizeTagHelper>(); }