【问题标题】:AmazonS3, how to check if the upload succeeded?AmazonS3,如何检查上传是否成功?
【发布时间】:2011-05-12 01:25:06
【问题描述】:

我用 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);

【问题讨论】:

    标签: java amazon-s3


    【解决方案1】:

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

    • 如果未提供 MD5,则会计算(适用于真实文件和 InputStream)
    • 上传完成后,md5 客户端和服务器端会进行比较,如果它们不同,则会引发 AmazonClientException。 [AmazonS3Client 1.19 的第 1188 行]

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

    AmazonClientException 和 AmazonServiceException 是未经检查的异常,因此请务必记住侦听它们,因为编译器不会强迫您这样做。

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2019-12-07
      • 2017-11-07
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2010-12-31
      相关资源
      最近更新 更多