2017-02-09 89 views
1

我想知道是否有可能返回某種類型的流(可能是內存流?)從我的AWS S3存儲桶中獲取的對象。從AWS S3獲取對象作爲流

S3存儲桶包含許多不同類型的圖像,文檔等。所有這些應該在我的網站上使用。但是,我不想顯示AWS S3存儲桶的路徑。
這就是爲什麼我試圖創建一個流,並顯示圖像和可下載的文件,而不是完整的路徑。這有意義嗎? :-)

我正在使用C#/ .NET AWS開發工具包。

期待聽到任何想法和指示!

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的與您正在創建的請求的替代品。