【发布时间】:2018-03-17 15:20:40
【问题描述】:
使用 AWSSDK.S3 nuget 包,我正在尝试返回已从 S3 存储桶中检索到的文件。我的出发点是基于SO answer 中给出的示例。
示例控制器代码:
public FileResult GetFile(Guid id)
{
// no using block as it will be disposed of by the File method
var amazonResponse = _foo.GetAmazonResponseWrapper(_user, id);
// set Response content-length header
// set Response content-type header
var bufferSize = 1024;
var buffer = new byte[bufferSize];
int bytesRead;
while ((bytesRead = amazonResponse.ResponseStream.Read(buffer, 0, buffer.Length)) > 0 && Response.IsClientConnected)
{
Response.OutputStream.Write(buffer, 0, bytesRead);
Response.OutputStream.Flush();
buffer = new byte[bufferSize];
}
// this will not work (can't read from this stream)
return File(Response.OutputStream, "text/plain", "bar.txt");
}
如果我写一个MemoryStream 我在while 循环中创建和使用,我会得到一个文件,但不会有任何内容。
我发现在文件中获取内容的唯一方法是像这样在流上调用.ToArray():
return File(memStream.ToArray(), "text/plain", "foo.txt");
有没有办法将文件实际流式传输到浏览器而不将其加载到 Web 服务器的内存中?
【问题讨论】:
标签: c# asp.net-mvc amazon-s3 stream