У меня есть следующие действия:Невозможно вернуть поток изображения из действий в ASP.NET MVC
public async Task<ActionResult> Get(string path)
{
StaticImage image = await _images.UseRepositoryAsync(repo => repo.ReadAsync(path));
return image != null ? new FileStreamResult(image.Stream, "image/jpeg") : (ActionResult)HttpNotFound();
}
У меня есть общие стратегии сохранения состояния (использует Amazon S3), который извлекает StaticImage
следующим образом:
//E is StaticImage in this case
//The returned entity is not disposed, it leaves that responsability to the controller
//However, the response IS disposed, that's why I need to copy the stream
public async Task<E> SelectAsync(params object[] keys)
{
using(GetObjectResponse response = await MakeGetObjectRequestAsync(keys.First().ToString()))
{
if(response == null) return default(E);
E entity = CreateEntity();
entity.Key = response.Key;
Stream entityStream = new MemoryStream(Convert.ToInt32(response.ResponseStream.Length));
await response.ResponseStream.CopyToAsync(entityStream);
entity.Stream = entityStream;
return entity;
}
}
response.ResponseStream
содержит содержимое изображения в:
И копируется нормально к новому потоку (см Length
):
Однако 0
байт возвращаются из моего контроллера:
Спасибо! Не могу поверить, что это была проблема! : P –
@MatiCicero без проблем. Это обычная проблема при работе с потоками. –