Как ImageSharp работает с контроллером Asp.Net Mvc - PullRequest
0 голосов
/ 08 октября 2018

Как 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 голосов
/ 08 октября 2018

Вы не используете промежуточное программное обеспечение или службы, которые предоставляют изображения промежуточному программному обеспечению.

Для того, чтобы промежуточное программное обеспечение работало, оно должно иметь возможность захвата запроса изображения.При установке по умолчанию это выполняется путем сопоставления запроса с источником изображения в вашей физической файловой системе в wwwroot.

В вашем коде, хотя вы создали изолированный результат действия, возвращающий поток, содержащий ваше изображение, о котором промежуточное программное обеспечение не знает.

Отказ от ответственности, следующее основано на последнихразработчик build 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 дляидентифицировать запрос и вернуть изображение.

...