2012-09-17 15 views
5

1週間に約1回、Amazon S3(1 \ 300)に保存するとファイルのアップロードに失敗します。次のコードは、ファイルが正しく保存されていることを確認するのに十分うまく機能しますが、より良い方法があるとは思えません。ファイルが失敗しても例外はスローされないので、問題がどこにあるかはわかりません。より良い確認のための任意の提案?Amazon S3 PutObject()は成功を確認する戻り値ですか?

AmazonS3Config _s3Config = new AmazonS3Config 
{ 
    ServiceURL = "s3.amazonaws.com", 
    CommunicationProtocol = Protocol.HTTPS, 
}; 

using (AmazonS3 client = AWSClientFactory.CreateAmazonS3Client("accessKey", "secretAccessKey", _s3Config)) 
{ 
    PutObjectRequest request = new PutObjectRequest(); 

    request.WithBucketName("bucketName") 
      .WithFilePath("filePath") 
      .WithKey("keyName"); 

    request.WithServerSideEncryptionMethod(ServerSideEncryptionMethod.AES256); 

    PutObjectResponse response = client.PutObject(request); 

    // what property from the response object can I check to confirm success??? 
} 

// the following DoesObjectExist() function uses the GetObjectMetadata() function 
if (!DoesObjectExist(keyName)) 
    throw new Exception("Failed!"); 
+1

を役に立てば幸い、S3は、最終的には一貫性のある書き込みを提供します。 'PutObject()'の直後に 'GetObjectMetadata()'を呼び出すと、オブジェクトがまだすべてのデータセンタにコピーされていないため、404が返されます。上記のコードは、putが成功した場合でも例外をスローする可能性があります。 AmazonS3クライアントは、クライアント側またはサーバー側のいずれかに障害が発生した場合に例外をスローします。 –

答えて

4

APIドキュメントによれば、送信したデータの計算されたMD5ハッシュに対してETag値をチェックすることをお勧めします。彼らは明らかに一致するはずです。

"オブジェクトがネットワーク上で壊れていないことを確認するには、オブジェクトのMD5を計算し、Amazon S3にPUTし、返されたEtagを計算されたMD5値と比較することができます。

http://docs.amazonwebservices.com/AmazonS3/latest/API/SOAPPutObject.html

デフォルト米国標準地域で

+0

これはうまくいくようですが、私はそれを配備して、それがどのようにプロダクションに定着しているかを見ていきます。 –

+1

MD5をキーか、実際に送信されたデータと比較して計算しますか? – armandomiani

関連する問題