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