2017-02-09 102 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的与您正在创建的请求的替代品。