2012-09-17 12 views
5

Aproximadamente una vez \ semana, la carga de un archivo falla al guardar en Amazon S3 (1 \ 300). El siguiente código funciona lo suficientemente bien como para confirmar que el archivo se guardó correctamente, pero no puedo evitar pensar que hay una mejor manera. Cuando un archivo falla, no se lanza ninguna excepción, así que nunca estoy realmente seguro de dónde radica el problema. ¿Alguna sugerencia para una mejor confirmación?Amazon S3 PutObject() valor de retorno para confirmar el éxito?

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

En la región por defecto estándar de EE.UU., S3 ofrece escrituras finalmente consistentes. Hacer una llamada 'GetObjectMetadata()' inmediatamente después de 'PutObject()' puede dar un 404, porque el objeto aún no se ha copiado a todos los centros de datos. Su código anterior puede arrojar una excepción, incluso cuando el put fue exitoso. El cliente de AmazonS3 arrojará una excepción si hubo una falla, ya sea del lado del cliente o del servidor. –

Respuesta

4

De acuerdo con la documentación de la API se recomienda comprobar el valor de ETag contra el hash MD5 calculado de los datos que has enviado. Obviamente deberían coincidir.

"Para garantizar que un objeto no se corrompe en la red, puede calcular el MD5 de un objeto, PONERLO en Amazon S3 y comparar el Etag devuelto con el valor MD5 calculado".

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

Espero que ayude

+0

Eso parece funcionar bien, lo implementaré y veré cómo se mantiene en producción. –

+1

Calcular el MD5 contra la clave o realmente los datos enviados? – armandomiani