Java AWS S3 PutObject MultiPart文件

时间:2018-02-09 06:00:43

标签: java amazon-web-services amazon-s3

在尝试将图像文件放在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";      
}

2 个答案:

答案 0 :(得分:2)

我建议使用TransferManager这是非常可靠的,并提供更好的性能,以便将文件传输到S3。它也是检查上传进度的选项(使用监听器)。

TransferManager

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