2014-01-28 2 views
3

У меня возникли проблемы с потоковой передачей файлов с amazon s3. В принципе, у меня есть файлы, хранящиеся на amazom s3, я не могу предоставить прямой доступ к этим файлам, поскольку пользователям необходимо пройти аутентификацию. Я пытаюсь найти способ передавать файлы без загрузки каждого файла с amazon на мой сервер, а затем с моего сервера на конечный клиент. Я просто хочу, чтобы иметь возможность передавать файл напрямую, но, похоже, большинство классов чтения потоков в .NET не являются кабелем для этого. Пожалуйста, поправьте меня, если я ошибаюсь.Потоковые файлы с amazon s3

+0

Вы можете уточнить, требуют ли файлы хранятся элемент безопасности в вашем приложении. Я понимаю, что вы можете создавать общедоступные (разделяемые) URL-адреса, используя Amazon S3 SDK в .net ... если вы хотите сгенерировать их и установить большое время истечения срока, вы можете перенаправить пользователя на создаваемую вами ссылку: http: // docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLDotNetSDK.html – JLo

ответ

6

Вы можете передать файл с 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]; 
    } 
} 
+0

Что не так с 'Stream.CopyTo'? – Gusdor

+0

Вы можете использовать Stream.CopyTo, только если вы используете .Net framework 4.0 или новее, я использовал его раньше, и у меня была проблема (повреждение файла), но я не уверен, в чем именно была проблема, но я думаю, что это было в потокового кодирования. –

Смежные вопросы