我的情况简述如下:我正在使用.NET SDK读取存储在亚马逊S3中的文件...
GetObjectRequest request = new GetObjectRequest
{
BucketName = this.m_bucketName,
Key = GetFileKey(fileIdentifier),
};
IAmazonS3 source = ...
GetObjectResponse response = await source.GetObjectAsync(request);
return response.ResponseStream;
然后,我将这个流传递给MVC作为一个File
结果
public async Task<FileResult> Download(...)
{
return File(GetAwsStream(...), ...);
}
问题是,显然S3在返回任何东西之前急切地计算整个文件的校验和。对于大文件来说,这是一个重大问题,因为:
- 网页服务器必须从AWS S3下载整个文件,然后才能开始将单个字节流式传输到客户端;对于大文件,网页服务器要花费数分钟才能响应客户端。 - 它在网页服务器上使用了大量内存来读取整个流并计算校验和。
这完全打败了使用流的意义。是否有任何方法可以从S3获取实际的“流”?
.ToArray()
可以获取内容,但是当下载文件时似乎无法仅使用return File(stream, contentType, fileName);
,因为文件是空的。 - Jecoms