gpt4 book ai didi

c# - 从 AWS S3 读取流涉及加载整个文件

转载 作者:行者123 更新时间:2023-11-30 16:47:22 28 4
gpt4 key购买 nike

我的场景的简短版本是我正在使用 .NET SDK 读取存储在 Amazon 的 S3 中的文件...

GetObjectRequest request = new GetObjectRequest
{
BucketName = this.m_bucketName,
Key = GetFileKey(fileIdentifier),
};

IAmazonS3 source = ...
GetObjectResponse response = await source.GetObjectAsync(request);
return response.ResponseStream;

然后我将这个流作为 File 结果传递给 MVC

public async Task<FileResult> Download(...)
{
return File(GetAwsStream(...), ...);
}

问题是,显然 S3 在返回任何内容之前急切地计算整个文件的校验和。对于大文件,这是一个重要的问题,因为

  • Web 服务器必须先从 AWS S3 下载整个文件,然后才能开始将单个字节流式传输到客户端;对于大文件,Web 服务器可能需要几分钟才能响应客户端
  • 它使用网络服务器上的大量内存来读取整个流并计算校验和

这完全违背了流的意义。有什么方法可以从 S3 获取实际的“流”吗?

最佳答案

您可以使用 HTTP Range header 在循环中下载 S3 对象的特定字节,然后在下载这些字节后将这些字节传递给客户端。这样一来,网络服务器就不必等到完整文件被检索到后才给客户端一些东西。

关于c# - 从 AWS S3 读取流涉及加载整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39496769/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com