【问题标题】:Streaming files from amazon s3从亚马逊 s3 流式传输文件
【发布时间】:2014-01-28 10:16:14
【问题描述】:

我在尝试从 amazon s3 流式传输文件时遇到问题。基本上,我的文件存储在amazom s3 上,我无法直接访问这些文件,因为需要对用户进行身份验证。我正在尝试找到一种流式传输文件的方法,而无需将每个文件从亚马逊下载到我的服务器,然后从我的服务器下载到最终客户端。我只是希望能够直接流式传输文件,但似乎 .NET 中的大多数流读取器类都不能这样做。如果我错了,请纠正我。

【问题讨论】:

  • 您可能想澄清正在存储的文件是否需要应用程序中的安全元素。我知道您可以在 .net 中使用 Amazon S3 开发工具包创建公共(可共享)URL...如果您想生成这些并设置较长的到期时间,您可以将用户转发到您生成的链接:docs.aws.amazon.com/AmazonS3/latest/dev/…

标签: c# amazon-s3


【解决方案1】:

您可以通过您的服务器将文件从 Amazon S3 流式传输到客户端,而无需将文件下载到您的服务器,方法是打开 Amazon S3 文件的流,然后从中读取并写入客户端流(逐个缓冲区)。

示例代码:

byte[] buffer = new byte[BUFFER_SIZE];                
GetObjectRequest getObjRequest = new GetObjectRequest().WithBucketName(Bucket_Name).WithKey(Object_Key);

using (GetObjectResponse getObjRespone = amazonS3Client.GetObject(getObjRequest))
using (Stream amazonStream = getObjRespone.ResponseStream)
{
    int bytesReaded = 0;        
    Response.AddHeader("Content-Length", getObjRespone.ContentLength.ToString());

    while ((bytesReaded = amazonStream.Read(buffer, 0, buffer.Length)) > 0 && Response.IsClientConnected)
    {
        Response.OutputStream.Write(buffer, 0, bytesReaded);
        Response.OutputStream.Flush();
        buffer = new byte[BUFFER_SIZE];
    }
}

【讨论】:

  • 您可以使用 Stream.CopyTo ,只要您使用 .Net 框架 4.0 或更高版本,我之前使用过它并且我遇到了问题(文件损坏)但我不确定到底是什么问题,但我认为它是在流编码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多