2011-12-21 15 views
5

私はAWS.Netを使用してユーザーコンテンツ(画像)をアップロードし、自分のサイトに表示しています。これは私のコードは、アップロードのため、現在のように見えるものです:S3ストレージを.NETで使用

using (client = Amazon.AWSClientFactory.CreateAmazonS3Client()) 
    { 
     var putObjectRequest = new PutObjectRequest 
     { 

      BucketName = bucketName, 
      InputStream = fileStream, 
      Key = fileName, 
      CannedACL = S3CannedACL.PublicRead, 
      //MD5Digest = md5Base64, 
      //GenerateMD5Digest = true, 
      Timeout = 3600000 //1 Hour 
     }; 

     S3Response response = client.PutObject(putObjectRequest); 
     response.Dispose(); 
} 

いただきましこれらのファイルへのパスを格納するための最良の方法?レスポンスから自分のファイルへのリンクを取得する方法はありますか?

現在私はhttps://s3.amazonaws.com/<MyBucketName>/のようなWebconfigのURLを持っています。イメージを表示する必要があるときは、アップロードしたファイルを表すデータベースに格納されているオブジェクトのキーを使用します。 これを行うより良い方法はありますか?

これに付属するすべての例では、この種の使用法は実際には扱いません。また、ドキュメントはオンラインではなく、Amazonの指示に従っているにも関わらず、SDKをインストールした後にドキュメントを入手する方法がわかりません。

+0

コードサンプルに+1してください! S3/SDKは、バケットのデフォルトに関係なく、アップロード時にプライベートファイルにデフォルト設定されているようです。転送ユーティリティで使用されているアクセス許可を明示的に設定した他のすべての例が見つかりました。入力ストリームはちょうど私が後にしたものです! – winwaed

答えて

2

あなたのバケット名を含むパスをweb.configに保存する方法は、私が行っているのと同じことです。これはうまくいきます。私は、さまざまなデータベーステーブルに相対パスを格納するだけです。

このアプローチの素晴らしい点は、CloudFrontなどのさまざまなストレージメカニズムやCDNに移行することが簡単にできることです。 S3のファイルはCNAMEマッピングを行うと、別のドメインまたはサブドメインに存在するため、.NETランタイムが同じドメインまたはサブドメインで実行されないため、このアプローチよりも優れた方法はないと思います。

0

また、S3Objectが存在するuriを直接指し示す「Location」プロパティもあります。

関連する問題