2017-02-09 5 views
1

Я пытаюсь выяснить, возможно ли вернуть какой-то поток (возможно, поток памяти?) Объекта, который я получаю из своего ковша AWS S3.Получить объект от AWS S3 как поток

Ведро S3 содержит много разных изображений, документов и т. Д. Все они должны использоваться на моем веб-сайте. Однако я не хочу показывать путь к моему ковру AWS S3.
Вот почему я пытаюсь создать поток и отображать изображения и загружаемые документы на лету, а не с полным путем. Имеет ли это смысл? :-)

Я использую C# /. NET AWS SDK.

С нетерпением ждем, когда услышу о любых идеях и направлениях, на которые указывает!

public FileStream GetFile(string keyName) 
{ 
    using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast2)) 
    { 
     GetObjectRequest request = new GetObjectRequest 
     { 
      BucketName = bucketName, 
      Key = keyName 
     }; 

     using (GetObjectResponse response = client.GetObject(request)) 
     using (Stream responseStream = response.ResponseStream) 
     using (StreamReader reader = new StreamReader(responseStream)) 
     { 
      // The following outputs the content of my text file: 
      Console.WriteLine(reader.ReadToEnd()); 
      // Do some magic to return content as a stream 
     } 
    } 
} 
+1

Это будет работать, если вы хотите скрыть путь к вашему ведру http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html – moondaisy

ответ

1

В .NET 4 вы можете использовать Stream.CopyTo скопировать содержимое ResponseStream (то есть Amazon.Runtime.Internal.Util.MD5Stream) к MemoryStream.

GetObjectResponse getObjRespone = client.GetObject(Bucket, objectName); 
MemoryStream stream = new MemoryStream(); 
getObjRespone.ResponseStream.CopyTo(stream); 
return stream; 

Где client.GetObject(Bucket, objectName) является альтернативой вызова GetObject с запросом, который вы создаете.

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