从亚马逊s3流式传输文件

时间:2014-01-28 10:16:15

标签: c# amazon-s3

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

1 个答案:

答案 0 :(得分:9)

您可以通过服务器将文件从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];
    }
}