java - 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"
}
]
}
附加策略权限
解决方案
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"
}
]
}
两种情况下的附加权限
推荐阅读
- python - 线性回归打印预测值
- python-3.x - 在这个问题中我必须使用什么样的功能?
- python - 是否有用于查看文档字符串的 vim 插件
- mysql - 从 MySQL 中的给定类别中获取单个随机记录
- python - anaconda中的python版本更新占用了太多磁盘。
- python - 从 cv2.cuda_ORB.detectAndComputeAsync 检索关键点
- javascript - 用下划线替换逗号、句号、连字符和空格
- oauth-2.0 - 使用 OAUTH2 和 PHPMailer 的 SMTP 到 O365
- python - 如何在类中创建装饰器?
- java - 我搜索实现函数获取字符串中出现次数最多的字符并计算它