【问题标题】:Amazon S3 PutObject() return value to confirm success?Amazon S3 PutObject() 返回值以确认成功?
【发布时间】: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 客户端将抛出异常。

标签: c# amazon-s3 amazon


【解决方案1】:

根据 API 文档,它建议您根据您发送的数据的计算 MD5 哈希值检查 ETag 值。他们显然应该匹配。

“为确保对象不会通过网络损坏,您可以计算对象的 MD5,将其放入 Amazon S3,然后将返回的 Etag 与计算的 MD5 值进行比较。”

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

希望有帮助

【讨论】:

  • 这似乎工作正常,我会部署它,看看它在生产中的表现如何。
  • 根据密钥或实际发送的数据计算 MD5?
猜你喜欢
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2019-01-11
  • 2017-08-04
  • 2012-03-04
  • 2020-01-20
相关资源
最近更新 更多