【发布时间】:2015-09-17 16:28:01
【问题描述】:
我有以下操作:
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 字节从我的控制器返回:
【问题讨论】:
标签: c# .net asp.net-mvc amazon-s3 stream