无法计算 MD5:AWS S3 存储桶

Posted

技术标签:

【中文标题】无法计算 MD5:AWS S3 存储桶【英文标题】:Unable to calculate MD5 : AWS S3 bucket 【发布时间】:2017-01-12 05:40:46 【问题描述】:

我的应用程序托管在 AWS Elastic Beanstalk - Tomcat 6 上。我的数据文件存储在 S3 存储桶中。当我在我的机器上的本地服务器上托管我的应用程序时,我能够读取数据并将数据写入我的 S3 存储桶(通过 SDK 使用),但是从托管在 Elastic Beanstalk 上的应用程序写入操作显示错误,即在 Elastic Beanstalk 上雄猫。我收到以下错误:

com.amazonaws.AmazonClientException:无法计算 MD5 哈希: visitorsinfo.json(没有这样的文件或目录)

我的 S3 存储桶中有visitorsinfo.json,可以从我机器上的本地服务器成功访问,但不能从 Elastic Beanstalk 访问。..

【问题讨论】:

EBS = 弹性块存储。您指的是 Elastic Beanstalk 吗? 此外,该错误消息的关键部分是No such file or directory 而不是您似乎关注的Unable to calculate MD5 hash。该文件实际上并不存在。 嗨,它的 Elastic Beanstalk,文件存在,当我将本地机器指向同一个存储桶时,它被修改了。它的行为很奇怪,有什么猜测吗? 添加一些代码来打印出 S3 对象的完整存储桶和密钥,也许它在服务器上使用了不正确的密钥前缀? 嗨,通过使用运行 Tomcat 7 Java 6 的 64 位 Amazon Linux 2014.03 v1.1.0 创建新应用程序解决了这个问题 【参考方案1】:

老兄,我也有同样的问题。但对我来说,我忘记在发送文件之前设置读取文件的权限。 就这个

ActivityCompat.requestPermissions(activity!!, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), 300)

【讨论】:

【参考方案2】:

如下所示,将 Input Stream 传递给 put 对象,而不是传递文件对象

InputStream is=file.getInputStream();                                                                           
s3client.putObject(new PutObjectRequest(bucketName, keyName,is,new ObjectMetadata())); 

【讨论】:

@SkyWalker 你能解释一下如何使用 InputStream 而不是文件来解决这个问题吗? @PrakharVerma 请查看***.com/a/28569038/2293534【参考方案3】:

通过创建一个配置为 64 位 Amazon Linux 2014.03 v1.1.0 并运行 Tomcat 7 Java 6 的新应用程序解决了这个问题

【讨论】:

以上是关于无法计算 MD5:AWS S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

无需通过 S3 控制台即可将 AWS S3 存储桶内容下载到本地

AWS S3:更改策略后无法列出存储桶

Spring Boot Amazon AWS S3 存储桶文件下载 - 拒绝访问

aws s3 存储桶策略

无法使用 PHP 显示 S3 存储桶

无法访问S3存储桶