【发布时间】:2012-09-09 09:02:43
【问题描述】:
在保存到 Amazon S3 (1\300) 时,大约每周一次文件上传失败。以下代码可以很好地确认文件保存正确,但我不禁想到有更好的方法。当文件确实失败时,不会引发异常,因此我永远无法确定问题出在哪里。有什么更好的确认建议吗?
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!");
【问题讨论】:
-
在默认的美国标准区域中,S3 提供最终一致的写入。在
PutObject()之后立即进行GetObjectMetadata()调用可能会给出404,因为该对象尚未复制到所有数据中心。即使 put 成功,您上面的代码也可能引发异常。如果在客户端或服务器端发生故障,AmazonS3 客户端将抛出异常。