我将尝试在Java网络应用程序中实现文件上传。当用户通过UI上传文件时,我希望它被存储在亚马逊S3存储中。
以下是我的后端代码:
以下是我的后端代码:
@PostMapping("/upload-file")
public String saveFile(@RequestParam("name") String name, @RequestParam("file")MultipartFile file, RedirectAttributes redirectAttributes){
AWSCredentials credentials = new BasicAWSCredentials("user", "psw");
AmazonS3 s3Client = new AmazonS3Client(credentials);
String bucketName = "kfib";
s3Client.createBucket(bucketName);
s3Client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.EU_WEST_1));
ObjectMetadata md = new ObjectMetadata();
md.setContentType("application/pdf");
// md.set
try{
InputStream inputStream = file.getInputStream();
s3Client.putObject(new PutObjectRequest(bucketName, name, inputStream, md).withCannedAcl(CannedAccessControlList.PublicRead));
S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucketName, name));
log.info("Url of the image:\n");
log.info(s3Object.getObjectContent().getHttpRequest().getURI().toString());
}catch(IOException e){
e.printStackTrace();
}
log.info("upload called with post method...");
return "redirect:/admin/posts";
}
如果我将文件上传到默认区域,那么我可以上传两个文件。但是,我希望将我的文件存储在另一个服务器上。我在欧盟地区有一个存储桶,如果我尝试使用上述代码将文件上传到该存储桶,则会收到以下错误代码:
com.amazonaws.services.s3.model.AmazonS3Exception: The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'eu-central-1' (Service: Amazon S3; Status Code: 400; Error Code: AuthorizationHeaderMalformed; Request ID: 8EF630B5F0224C4F)
看起来这一行
s3Client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.EU_WEST_1));
没有任何效果。我做错了什么吗?
AmazonS3Client.setRegion()
已被弃用。你是否尝试使用AwsClientBuilder.setRegion(String)
?请参考:http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/client/builder/AwsClientBuilder.html#setRegion-java.lang.String- - Roman Puchkovskiys3Client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.EU_WEST_1));
似乎有点...多余。这不仅仅是s3Client.setRegion(Regions.EU_WEST_1)
吗? - Michael - sqlbot