首页 > 解决方案 > AWS S3 响应失败,即使文件已完全上传

问题描述

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

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

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

这是我得到的例外:

AmazonClientException: Unable to verify integrity of data upload. Client calculated content hash didn't match hash calculated by Amazon S3. You may need to delete the data stored in Amazon S3.

这些是我正在使用的库:

com.amazonaws:aws-android-sdk-s3:$version

com.amazonaws:aws-android-sdk-mobile-client:$version

任何帮助将非常感激。

标签: javaandroidamazon-web-servicesamazon-s3

解决方案


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

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

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

如果有原因,我将进一步调查此问题并通知 AWS 支持。


推荐阅读