当前位置: 首页 > 面试题库 >

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

公冶俊达
2023-03-14
问题内容

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

问题答案:

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

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

换句话说,要回答我自己的问题,就足以侦听异常,因为还要检查上传数据的MD5,因此,如果存在损坏,则会引发异常。

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



 类似资料:
  • 问题内容: 好吧,我是SQL的新手,我刚刚读到,存储过程始终返回一个值,确定该过程中的查询是否已成功执行是一种很好的做法。 所以我有一个带有select语句的简单存储过程,如果要执行,我想返回1,否则返回-1。 您能告诉我如何用SQL编写该条件吗? 如果有关系,我的数据库是MS SQL Server。 谢谢你。 问题答案: 使用输出参数返回成功状态以及Try..Catch块

  • 在AWS secretsmanager中创建了一个秘密,使用lambda函数启用了自动旋转。当我第一次从cli触发旋转时,它还没有完成。这是手动在aws控制台中更新secret时secret的初始状态。 现在我从aws cli触发了旋转 Cloudwatch日志在此创建处停止。ecret:成功地为ARN放置secret ARN:aws:secretsmanager:xxxxxxx..看起来只调用c

  • 我需要在。我发现了这里提到的一种方法。它表明: 快照完成后,使用更新的白名单启动原始连接器 但是如何才能发现快照是否完整呢?

  • 来自文档:“当您使用传输管理器下载文件时,实用程序会自动确定对象是否为多部分” 来源:https://AWS . Amazon . com/fr/blogs/developer/parallelizing-large-downloads-for-optimal-speed/ 这意味着某处有指标(元数据?属性?)可以告诉你一个文件是否是多部分的。所以在用java SDK测试之前,我正在用AWS CL

  • 我正在尝试使用JunRAR提取RAR文件。但正如我从这个问题中读到的:OutOfMemoryError当我在Android上解压缩RAR文件时,JunRAR尚未针对Android进行优化。所以,我想做的是检查提取是否成功,然后如果失败则给出错误消息。(因为如果提取不成功,我的应用程序会崩溃)。有人能告诉我如何进行检查吗?我的线程在这里完成: 这是我的Logcat错误:

  • 所以,我正在尝试检查用户是否在某个消息中被@过。这就是我目前拥有的: (它包装在客户端中。当检测到消息发送时) 我在这里做错了什么?