在尝试将图像文件放在S3上时,我遇到了一些问题,
exception = "com.amazonaws.SdkClientException";
message = "Unable to calculate MD5 hash: /home/ubuntu/image1517896928.png (No such file or directory)";
我首先在我的服务器上下载MultipartFile然后使用我调用putObject方法的文件,
因为S3 putObject方法采用以下参数 -
putObject(String arg0, String arg1, File arg2)
这是我的代码 -
public String uploadImage(MultipartFile image) throws IOException, InterruptedException{
File localFile = new File(SERVER_HOME_DIRECTORY + image.getOriginalFilename());
AmazonS3 s3client = new AmazonS3Client();
s3client.setRegion(Region.getRegion(Regions.EU_CENTRAL_1));
s3client.putObject(new PutObjectRequest("bucketName", "prefix", localFile));
return "ok";
}
答案 0 :(得分:2)
我建议使用TransferManager
这是非常可靠的,并提供更好的性能,以便将文件传输到S3。它也是检查上传进度的选项(使用监听器)。
Sample code using TransferManager
TransferManager提供了一个简单的API,用于将内容上传到亚马逊 S3,并广泛使用Amazon S3分段上传来实现 提高吞吐量,性能和可靠性。
如果可能,TransferManager会尝试使用多个线程 一次上传单个上传的多个部分。处理时 大内容大小和高带宽,这可能具有重要意义 提高吞吐量。
答案 1 :(得分:1)
您必须先将multipart文件写入localFile。 image.transferTo(localFile);
public String uploadImage(MultipartFile image) throws IOException, InterruptedException{
File localFile = new File(SERVER_HOME_DIRECTORY + image.getOriginalFilename());
image.transferTo(localFile);
AmazonS3 s3client = new AmazonS3Client();
s3client.setRegion(Region.getRegion(Regions.EU_CENTRAL_1));
s3client.putObject(new PutObjectRequest("bucketName", "prefix", localFile));
return "ok";
}