2012-09-17 9 views
5

Około raz na tydzień przesyłanie pliku kończy się niepowodzeniem podczas zapisywania do Amazon S3 (1 \ 300). Poniższy kod działa wystarczająco dobrze, aby potwierdzić, że plik został zapisany poprawnie, ale nie mogę pomóc, ale myślę, że jest lepszy sposób. Kiedy plik nie powiedzie się, nie jest zgłaszany wyjątek, więc nigdy nie jestem pewien, gdzie leży problem. Wszelkie sugestie dotyczące lepszego potwierdzenia?Amazon S3 PutObject() zwraca wartość, aby potwierdzić powodzenie?

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

W domyślnym regionie standardu USA, S3 zapewnia ostatecznie spójne zapisy. Wykonywanie wywołania 'GetObjectMetadata()' bezpośrednio po 'PutObject()' może dać 404, ponieważ obiekt nie został jeszcze skopiowany do wszystkich centrów danych. Powyższy kod może spowodować wyjątek, nawet jeśli instalacja zakończyła się powodzeniem. Klient AmazonS3 wygeneruje wyjątek, jeśli wystąpił błąd po stronie klienta lub po stronie serwera. –

Odpowiedz

4

Zgodnie z dokumentacją API zaleca się sprawdzenie wartości ETag w stosunku do obliczonego skrótu MD5 danych, które wysłałeś. Oczywiście powinny pasować.

"Aby upewnić się, że obiekt nie jest uszkodzony przez sieć, można obliczyć wartość MD5 obiektu, umieścić go w Amazon S3 i porównać zwróconą wartość Etag do obliczonej wartości MD5."

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

nadzieję, że pomoże

+0

Wydaje się, że działa dobrze, rozmieszczę go i zobaczę, jak wytrzyma w produkcji. –

+1

Obliczyć MD5 w stosunku do klucza lub rzeczywiście wysłać dane? – armandomiani