无法计算 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 存储桶内容下载到本地