【问题标题】:Generating URL from amazon s3 (streaming files from amazon s3)从 amazon s3 生成 URL(来自 amazon s3 的流文件)
【发布时间】:2014-07-24 07:17:39
【问题描述】:

我在尝试从 amazon s3 下载文件时遇到问题。我有文件存储在 amazom s3 上,要访问这些文件,用户需要经过身份验证。我正在尝试找到一种流式传输文件的方法,而无需将每个文件从亚马逊下载到我的服务器,然后从我的服务器下载到最终客户端。我只是希望能够通过生成 url 直接流式传输文件,您能提出一些想法吗?

【问题讨论】:

    标签: c#-4.0 amazon-web-services amazon-s3 amazon


    【解决方案1】:

    我知道这是一个老问题,但我有针对这种确切情况的解决方案。

    基本上,您希望以强制下载而不是在浏览器窗口中打开的方式将存储在 Amazon S3 上的文件呈现给用户的浏览器。通常,如果您将文件本地存储在服务器上,那么这很容易做到。但是,您不希望首先将文件从 S3 下载到您的服务器,然后再将其发送到客户端,所以...

    您需要安装 Amazon S3 开发工具包,您可以在此处从 Nuget 获得:https://www.nuget.org/packages/AWSSDK.S3/

    另外,请确保您引用了这些命名空间:

    using Amazon;
    using Amazon.S3;
    using Amazon.S3.Model;
    

    这是我用来在 Amazon S3 上强制下载远程文件的代码:

    byte[] buffer = new byte[4096];
    
    GetObjectRequest getObjRequest = new GetObjectRequest {
    BucketName = "**yourbucketname**",
    Key = "**yourobjectkey**"
    }; 
    
    IAmazonS3 client = new AmazonS3Client("**youraccesskeyid**", "**yoursecretkey**", RegionEndpoint.EUWest2); //< set your own region
    
    using (GetObjectResponse response = client.GetObject(getObjRequest))
        using (Stream stream = response.ResponseStream)
                {
                    int bytesRead = 0;
    
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(response.Key));
                    Response.AppendHeader("Content-Length", response.ContentLength.ToString());
                    Response.ContentType = "application/force-download";
    
                    while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0 && Response.IsClientConnected)
                    {
                        Response.OutputStream.Write(buffer, 0, bytesRead);
                        Response.OutputStream.Flush();
                        buffer = new byte[4096];
                    }
                }
    

    与往常一样,我确信有更好的方法来实现这一点,但这段代码对我有用。

    【讨论】:

      【解决方案2】:

      AWS 为 .Net 提供 SDK,可让他们下载(和上传文件)。 例如这里:http://ceph.com/docs/master/radosgw/s3/csharp/

      一个快速的谷歌应该会给你答案。如果有什么具体的事情你不能做,那么请再解释一下你的问题。

      【讨论】:

      • 问题解决了吗? SDK 不适合您吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2020-09-23
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      相关资源
      最近更新 更多