2011-10-24 16 views
3

への書き込み、私はC#を使用してアマゾンS3に画像をアップロードしようとしています:は、Amazon S3の

PutObjectRequest titledRequest = null; 

S3Response response = null; 

using (var memoryStream = new MemoryStream()) 
{ 

    image.Save(memoryStream, ImageFormat.Png); 

    titledRequest = new PutObjectRequest(); 

    titledRequest.WithBucketName(bucketName) 
       .WithKey(keyName) 
       .WithCannedACL(S3CannedACL.PublicRead) 
       .WithInputStream(memoryStream); 

    response = client.PutObject(titledRequest); 
} 

あなたが見ることができるように、私は、ローカルの画像ファイルを保存するのではなくS3にそれをストリーミングするわけではありません。しかし何らかの理由で、このプロセスは50kbのファイルで約50秒かかります!

アップロード速度が1mbpsを超えていても問題はありません。

ファイルを保存してアップロードする方が早いのですか?

私はアップロードプロセスをスピードアップするために考慮すべきことはありますか?再び、ブロードバンドの問題には何の問題もありません!

+0

アップロードマネージャまたはコマンドラインツールを使用して同じファイルをS3にアップロードするにはどのくらい時間がかかりますか?あなたは1日の時間帯に何回か測定しましたか? S3、またはデータセンターからAWSへのルートが時々遅くなる可能性があります。 –

+0

@EricJ - ちょうど118kbの画像を試したところ、12秒かかりました。 50kbの約50秒は一貫しています。手動で10回以上アプリケーションを実行し、 'Stopwatch'クラスを使用します。 – Abs

答えて

5

Amazon docsは言う:

入力ストリームからアップロードする場合は、必ず コンテンツのサイズを設定してメタデータを指定します。それ以外の場合、入力ストリームの内容はをメモリにバッファリングしてからAmazon S3に送信する必要があります。これにより、パフォーマンスが非常に悪くなる可能性があります( )。

これはあなたの問題だとは信じられませんが、あなたが従うべきベストプラクティスです。考慮すべき

その他のもの -

  • あなたが 自分のイメージを処理する方法をS3に伝えるために、他のObjectMetadataを指定する必要がありますか?
  • バケットが存在するか、または最初のオブジェクトの一部が作成されています 操作を送信しますか?
+0

私はすべての問題に近づいてきた方法を変えました。しかし、これは私が近い将来に留意すべき非常に有用な情報です。 – Abs