【问题标题】:Unable to upload image to S3 via Beanstalk无法通过 Beanstalk 将图像上传到 S3
【发布时间】:2017-10-16 16:53:54
【问题描述】:

我无法使用以下方法通过部署在 Amazon Elastic Beanstalk 上的 Spring Boot 应用程序将图像上传到 S3:

    @Autowired
    private AmazonS3Client amazonS3Client;

    amazonS3Client.setEndpoint(S3_REGION_ENDPOINT);
    amazonS3Client.putObject(new PutObjectRequest(S3_BUCKET_NAME, key, fileToUpload));

日志显示如下错误:

Caused by: java.io.IOException: Permission denied
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1012)
    at com.g2m.persistence.image.service.FileArchiveService.convertFromMultiPart(FileArchiveService.java:91)
    at com.g2m.persistence.image.service.FileArchiveService.saveFileToS3(FileArchiveService.java:44)

但是当尝试使用本地端点(在本地运行 Spring Boot)上传图像时,我成功地将图像上传到 S3 并检索它。

知道如何解决这个问题吗?它与 S3 权限有关还是完全没有关系?

【问题讨论】:

  • 您是否查看了您的 EC2 实例角色?您是否在本地计算机上使用相同的用户/凭据?有一个类似的问题stackoverflow.com/questions/41667916/…
  • @siomes 是的,我已经审查了该角色,并且在从本地计算机上传时也使用了相同的凭据
  • 请检查您是否设置了存储桶策略并授予了正确的IAM角色和权限。还要确保正确定义了您为文件或图像提供的路径。 :)

标签: spring-boot amazon-s3 amazon-ec2 amazon-elastic-beanstalk


【解决方案1】:

在我看来,您没有正确实例化 S3 客户端。您能否在实例化时检查您是否提供了正确的凭据?

类似

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
amazonS3Client = new AmazonS3Client(credentials);

【讨论】:

  • 感谢大家的回答。 @Tanmay Delhikar 我实际上对 accessKey 和 secretKey 使用 bean 注入,如下所示: 那么,应该没问题吧?即使改变了你的建议,我仍然得到同样的错误
  • 是的,这听起来很正确。您尝试写入的存储桶是否存在?
  • 是的,它确实存在。当我使用本地端点(在本地运行 Spring Boot)上传图像时,它可以工作。但是使用部署在 Beanstalk 上的应用上传会返回这样的错误
  • @blacky246 我遇到了确切的问题,您解决了吗,还是您弄清楚错误发生的原因?
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 2017-01-29
  • 2021-07-22
  • 2014-03-11
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2013-08-24
相关资源
最近更新 更多