C# Amazon S3 PutObject()返回值以确认成功?

C# Amazon S3 PutObject()返回值以确认成功?,c#,amazon-s3,amazon,C#,Amazon S3,Amazon,在保存到Amazon S3(1\300)时,大约每周有一次文件上载失败。下面的代码可以很好地确认文件是否正确保存,但我不得不认为有更好的方法。当一个文件失败时,不会抛出任何异常,因此我永远无法确定问题出在哪里。有什么更好的确认建议吗 AmazonS3Config _s3Config = new AmazonS3Config { ServiceURL = "s3.amazonaws.com", CommunicationProtocol = Protocol.HTTPS, };

在保存到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!");

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

为了确保对象没有在网络上损坏,您可以计算对象的MD5,将其放入Amazon S3,然后将返回的Etag与计算出的MD5值进行比较


希望这有助于

工作正常,我将部署它,看看它在生产中的表现如何。根据密钥或实际发送的数据计算MD5?在默认的美国标准区域中,S3提供最终一致的写入。在
PutObject()
之后立即调用
GetObjectMetadata()
可能会得到404,因为该对象尚未复制到所有数据中心。上面的代码可能会抛出异常,即使put成功。如果客户端或服务器端出现故障,AmazonS3客户端将抛出异常。