Streaming files from amazon s3

2020-06-04 12:43发布

问题:

I have a problem trying to stream files from amazon s3. Basically, I have files stored on amazom s3, I can't provide direct access to these files as users need to be authenticated. I'm trying to find a way to stream files without downloading each file from amazon onto my server and then from my server to the end client. I just want to be able to stream the file direct, but it seems most of the stream reader classes in .NET are not cable of doing this. Please correct me if I am wrong.

回答1:

You can stream the file from Amazon S3 to the client through your server without downloading the file to your server, by opening a stream to the Amazon S3 file then read from it and write on the client stream (buffer by buffer).

Sample Code:

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];
    }
}


标签: c# amazon-s3