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();
}
要使此功能有效,我在这里缺少什么?
答案 0 :(得分:0)
您没有使用中间件,也没有使用向中间件提供图像的服务。
要使中间件正常工作,它必须能够捕获图像请求。对于默认安装,这是通过将请求与wwwroot中物理文件系统中的映像源进行匹配来完成的。
尽管在代码中创建了一个隔离的操作结果,但返回的流中包含中间件不知道的图像。
免责声明,以下内容基于最新的开发人员版本 1.0.0-dev000131 ,尽管更改的可能性很小,但在最终发行之前可能会发生变化。
https://www.myget.org/feed/sixlabors/package/nuget/SixLabors.ImageSharp.Web/1.0.0-dev000131
为了提供来自自定义来源的图像,您将需要创建自己的IImageProvider
和IImageResolver
的实现,您可以在源代码中使用示例作为实现的基础。
一旦实现,您将需要通过依赖项注入来注册实现。由于您不再使用默认值,因此需要使用更细粒度的注册。
// 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>();
然后,您应该能够完全删除操作结果,并使用IImageProvider
和IImageResolver
组合来标识请求并返回图像。