ImageSharp如何与Asp.Net Mvc控制器一起使用

时间:2018-10-08 09:58:57

标签: .net-core imagesharp

ImageSharp如何与从数据库加载的动态图像一起使用? 这是我的控制器,它获取图像文件:

public async Task<FileResult> GetPhoto([FromQuery] GetFileAttachementInputAsync input)
    {
        var file = await filesAttachementAppService
            .GetFileAsync(new GetFileAttachementInputAsync() { FileId = input.FileId })
            .ConfigureAwait(false);
        return file != null 
            ? File(new MemoryStream(file.FileDto.FileContent), file.FileDto.ContentType, file.FileDto.FileName) 
            : null;
    }

这是我的HTML通话:

<img src="/PropertyAdministration/GetPhoto?FileId=@item.MainPhotoId&width=554&height=360" alt="" />

我正在按以下方式使用ImageSharp:

 public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        services.AddImageSharp();
    }
public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
    {            
        app.UseImageSharp();
    }
  

要使此功能有效,我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您没有使用中间件,也没有使用向中间件提供图像的服务。

要使中间件正常工作,它必须能够捕获图像请求。对于默认安装,这是通过将请求与wwwroot中物理文件系统中的映像源进行匹配来完成的。

尽管在代码中创建了一个隔离的操作结果,但返回的流中包含中间件不知道的图像。

免责声明,以下内容基于最新的开发人员版本 1.0.0-dev000131 ,尽管更改的可能性很小,但在最终发行之前可能会发生变化。

https://www.myget.org/feed/sixlabors/package/nuget/SixLabors.ImageSharp.Web/1.0.0-dev000131

为了提供来自自定义来源的图像,您将需要创建自己的IImageProviderIImageResolver的实现,您可以在源代码中使用示例作为实现的基础。

一旦实现,您将需要通过依赖项注入来注册实现。由于您不再使用默认值,因此需要使用更细粒度的注册。

// Fine-grain control adding the default options and configure all other services. Setting all services is required.
services.AddImageSharpCore()
        .SetRequestParser<QueryCollectionRequestParser>()
        .SetBufferManager<PooledBufferManager>()
        .SetMemoryAllocatorFromMiddlewareOptions()
        .SetCacheHash<CacheHash>()
        .AddProvider<PhysicalFileSystemProvider>()
        /// Add your provider here via AddProvider<T>().
        .AddProvider<PhysicalFileSystemProvider>()
        .AddProcessor<ResizeWebProcessor>()
        .AddProcessor<FormatWebProcessor>()
        .AddProcessor<BackgroundColorWebProcessor>();

然后,您应该能够完全删除操作结果,并使用IImageProviderIImageResolver组合来标识请求并返回图像。