2017-02-09 15 views
1

AWS S3バケットから取得したオブジェクトの何らかの種類のストリーム(おそらくメモリストリーム?)を返すかどうかを調べようとしています。AWS S3からストリームとしてオブジェクトを取得

S3バケットには、さまざまな種類の画像やドキュメントなどが含まれています。これらはすべて自分のウェブサイトで使用する必要があります。しかし、私はAWS S3バケットへのパスを表示したくありません。
これは、フルパスではなく、ストリームを作成し、画像とダウンロード可能な文書をその場で表示しようとしている理由です。これは理にかなっていますか? :-)

私はC#/。NET AWS SDKを使用しています。

どのようなアイデアや方向性が指摘されているのを楽しみにしています! .NET 4で

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

、あなたはMemoryStreamをする(つまりAmazon.Runtime.Internal.Util.MD5Streamある)ResponseStreamの内容をコピーするStream.CopyToを使用することができます。 client.GetObject(Bucket, objectName)が作成しているリクエストでのGetObjectを呼び出すに代わるものです

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

関連する問題