部署到EBS时,AWS S3上传图像不起作用,但在localhost SpringBoot(JAVA)中起作用

时间:2018-08-03 02:31:28

标签: java amazon-web-services spring-boot amazon-s3 elastic-beanstalk

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

application.properties

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

ProductController.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";
    }

}

AmazonClient.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角色

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

附加的策略权限

Attached Policy permission

1 个答案:

答案 0 :(得分:0)

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"
    }
  ]
}

在两种情况下均具有权限

Attached Permission in Both Case