亚马逊S3,如何检查上传是否成功?

8
我用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个回答

17

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

  • 如果没有提供MD5值,它将被计算(适用于实际文件和InputStream)
  • 当上传完成后,将比较客户端和服务器端的md5值,如果不同,则抛出AmazonClientException异常。【AmazonS3Client 1.19的第1188行】

换句话说,为了回答我的问题,只需监听异常即可,因为上传的数据的MD5值也会被检查,所以如果存在损坏,将引发异常。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接