2014-01-28 155 views
3

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

+0

你可能想澄清被存储的文件是否需要在应用程序中的安全性的元素。据我所知,您可以在.net等创建使用Amazon S3的SDK公共(共享)的网址,如果你想生成这些并设置一个较大的到期时间,你可以转发用户到你生成链接:http:// docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLDotNetSDK.html – JLo

回答

6

您无需将文件下载到您的服务器,通过打开流亚马逊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]; 
    } 
} 
+0

哪些错误与'Stream.CopyTo'? – Gusdor

+0

只是如果你使用的.Net框架4.0或更高版本可以使用Stream.CopyTo,我使用它之前,我是有一个问题(文件损坏),但我不知道究竟是问题,但我认为这是在流编码。 –