java - AWS S3 响应失败,即使文件已完全上传

标签 java android amazon-web-services amazon-s3

我只是尝试通过 Android 应用程序将图像上传到 S3。到目前为止我的结论是,大于 5MB 的图像上传没有问题,但是,小于 5MB 的图像已完全上传并且可以从 S3 手动下载,但是,响应 i获取失败。我只是想提醒您,5MB是发出分段请求的最低阈值(当文件超过5MB时,SDK会自动使用分段上传,我在他们的代码中检查了这一点)。

我还手动检查了 md5 总和,以及两个文件(已上传和选择上传)的总和匹配

我测试了使用 AWS S3 CLI 上传小图像,它可以正常工作。

这是我得到的异常:

AmazonClientException:无法验证数据上传的完整性。客户端计算的内容哈希与 Amazon S3 计算的哈希不匹配。您可能需要删除存储在 Amazon S3 中的数据。

这些是我正在使用的库:

com.amazonaws:aws-android-sdk-s3:$版本

com.amazonaws:aws-android-sdk-mobile-client:$版本

任何帮助将不胜感激。

最佳答案

基本上,问题在于上传图像的存储桶是加密的,一旦我们创建了新的未加密的存储桶,上传就可以了。 两个文件的哈希值似乎不同,因为一个哈希计算是在加密文件上进行的,而另一次是在未加密文件上进行的。看起来(虽然我不完全确定)多部分请求只是绕过了 md5 校验和检查。

重要的是,这只发生在使用 Android SDK 时,iOS 工作正常(不知道实现上的确切差异是什么,我可能稍后会更新)。

在引入加密之前,它已经工作了几个月。

我将进一步调查此问题,并在有原因的情况下通知 AWS 支持人员。

关于java - AWS S3 响应失败,即使文件已完全上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62075180/

相关文章:

c++ - 如何使用 TCP 窗口缩放来增加 C++ 中 AWS S3 的吞吐量?

amazon-web-services - 如何仅显示特定国家/地区的最低价格?

ruby-on-rails - 使用 AWS Cloudfront 异步加载 Google map

java - primefaces 时间表 : edit event details on move/resize event listeners

java - 为什么我无法获取 google 等热门网站的内容编码?

java - 有没有办法更改 Android Google Map API 的 map 数据?

android - getApplicationContext() 在服务中返回 null

java - 是否可以重用包含闭包的 Runnable

Java Casting : Java 11 throws LambdaConversionException while 1. 8 没有

java - 存在布局问题