因此,在我的应用中,用户可以将他们的照片上传到S3存储,然后我会将返回的Url保留到数据库。
我遇到的问题是,当我将应用程序部署到我的Elastic Beanstalk环境时,由于我在catalina.out日志中发现的错误,我无法将照片存储到S3存储:
java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at com.common.util.file.FileUtil.convert(FileUtil.java:17)
如何设置权限以便我可以修复此错误?
[编辑] 当我在localhost上运行应用程序时,我就可以将文件上传到S3存储桶中。我在this link中使用此示例代码作为上传文件的实现模板。
以下是我用来将多部分文件转换为文件的代码:
public File convert(MultipartFile file) throws IOException {
File convFile = new File(file.getOriginalFilename());
convFile.createNewFile(); // Cause IOException
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
答案 0 :(得分:2)
在您的应用程序中,请勿附加aws凭据。创建应具有AWS S3权限的IAM角色。使用Elastic Beanstalk启动应用程序时,请将此IAM角色附加到EC2实例。
您的应用程序使用IAM角色对AWS S3进行身份验证以上载映像。最佳做法是附加具有通过AutoScaling组或Elastic Beanstalk或直接从EC2仪表板启动EC2实例的特定权限的IAM角色。
答案 1 :(得分:0)
您提供的示例代码的link使用 ProfileCredentialsProvider ,它会从配置文件配置文件中为默认配置文件(read more)发布AWSCredentials。
您需要(1)将配置文件从本地计算机复制到EC2实例,或者(2)使用其他方法向SDK提供AWS凭据。例如,请参阅Working with AWS Credentials。