我只是尝试通过 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/