首页 > 解决方案 > AWS S3 上传图像在部署到 EBS 时不起作用,但在 localhost SpringBoot (JAVA) 中起作用

问题描述

我可以将图像从本地上传到 S3,但在部署到 EBS 时不能。此代码在我本地运行时有效,但当我在 AWS EBS 中部署相同的代码时,图像上传根本不起作用。我没有看到任何错误日志。试图搜索所有死胡同的解决方案。如果有人能指出我正确的方向,我会非常喜欢它。我正在使用 t2.micro 实例

应用程序属性

amazonProperties.endpointUrl: https://s3.us-east-2.amazonaws.com
amazonProperties.bucketName: "BUCKETNAME"

产品控制器.java

@Controller
public class ProductController {
   @Autowired  
   private AmazonClient amazonClient;
    @Value("${amazonProperties.endpointUrl}")
    private String endpointUrl;
    @Value("${amazonProperties.bucketName}")
    private String bucketName;

    @RequestMapping(value="/addmaincategory", method=RequestMethod.POST)
    public String
     addmaincategory(@ModelAttribute("product") Product product,BindingResult result,Model model){
        MultipartFile image= product.getProductImage();
        String imageName = amazonClient.addImage(image);    
        product.setProductImageName(imageName );
        productRepository.save(category);
        model.addAttribute("product",product);
        return "productdetails";
    }

}

亚马逊客户端.java

   @Service
    public class AmazonClient {
        @Autowired
        private AmazonS3 s3client;

        @Value("${amazonProperties.endpointUrl}")
        private String endpointUrl;
        @Value("${amazonProperties.bucketName}")
        private String bucketName;


    private File convertMultiPartToFile(MultipartFile file) throws IOException {
            File convFile = new File(file.getOriginalFilename());
            FileOutputStream fos = new FileOutputStream(convFile);
            fos.write(file.getBytes());
            fos.close();
            return convFile;
        }

     private void uploadFileTos3bucket(MultipartFile file) {
           File file = convertMultiPartToFile(file);
           String fileName = "myfile.png";      
            s3client = AmazonS3ClientBuilder.defaultClient();     
            PutObjectRequest request = new PutObjectRequest(bucketName, fileName, file).withCannedAcl(CannedAccessControlList.PublicRead);
            s3client.putObject(request);
        }

    }

IAM ROLE 与可信实体

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "elasticbeanstalk.amazonaws.com",
          "ec2.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

附加策略权限

附加策略权限

标签: javaamazon-web-servicesspring-bootamazon-s3amazon-elastic-beanstalk

解决方案


Elasticbeanstalk 可信实体

 {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "elasticbeanstalk.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }

EC2 可信实体

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

两种情况下的附加权限

两种情况下的附加权限


推荐阅读