AmazonS3,如何检查上传是否成功?

时间:2011-05-07 17:11:43

标签: java amazon-s3

我用Java编写了一个简短的测试代码来上传在内存中生成的PDF文件。在这个测试代码中我只使用一个虚拟字节数组,但在实际使用中,我将在该字节数组中放置一个生成的PDF(最多2-3页)。一切正常:文件上传并设置权限。

然而,由于我已经返回PutObjectResult,我想知道我应该如何检查它。或者是否足以查找AmazonClientException和AmazonServiceException异常?

换句话说:如何检查上传是否成功并且没有损坏我的数据?

    String bucket = "mybucket.example.com";
    String fileName = "2011/test/test.pdf";
    AmazonS3 client = new AmazonS3Client(new BasicAWSCredentials(
        "accessKey", "secretKey"));
    byte[] contents = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    InputStream stream = new ByteArrayInputStream(contents);
    ObjectMetadata meta = new ObjectMetadata();
    meta.setContentLength(contents.length);
    meta.setContentType("application/pdf");
    PutObjectResult res = client.putObject(bucket, fileName, stream, meta);
    client.setObjectAcl(bucket, fileName, CannedAccessControlList.PublicRead);

1 个答案:

答案 0 :(得分:14)

我查看了AWS的源代码并对其进行了调试,并发现了以下内容:

  • 如果未提供MD5,则计算(对真实文件和InputStream有效)
  • 上传完成后,将比较md5客户端和服务器端,如果它们不同,则抛出AmazonClientException。 [AmazonS3Client 1.19第1188行]

换句话说,要回答我自己的问题,只需要监听异常,因为上传数据的MD5也会被检查,所以如果出现了损坏,就会引发异常。

AmazonClientException和AmazonServiceException是未经检查的异常,因此记住监听它们非常重要,因为编译器不会强制您这样做。