如何将图像上传到S3存储桶

时间:2020-01-29 21:29:25

标签: java amazon-s3 multipart

对于一个电子商务网站,如果我有一个产品列表,每个产品都有10张图片。与他们相关联。 当请求来自UI(基于ReactJS)到后端(基于Java)时,如何将图像存储到S3存储桶。 我实现了创建一个存储桶,其中每个产品都有一个包含图像的文件夹。 我创建了一个对ec2实例的S3访问策略角色。 我正在使用AWS S3 SDK与AWS S3进行交互 我使用MultiPartResolver列表公开了一个REST API,用于存储图像,如下所示:

@PostMapping(value = "product/{productId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,
    produces = MediaType.APPLICATION_JSON_VALUE)
public void uploadImages(
    @PathVariable Long productId,
    @RequestParam(name = "files", required = false) List<MultipartFile> files)

并且正在使用IMPL:

ArrayList<File> files = new ArrayList<>();

// TODO: Shall we upload zip files??
for (MultipartFile multipartFile : multipartFiles) {
  files.add(convertMultiPartFileToFile(multipartFile));
}

TransferManager transferManager = TransferManagerBuilder
    .standard()
    .withS3Client(amazonS3Client)
    .build();
try {
  //TODO: Logic to create a directory

  MultipleFileUpload multipleFileUpload = transferManager
      .uploadFileList(amazonClientConfig.getImagesBucketName(), listingId.toString(),
          new File("."), files);
  // loop with Transfer.isDone()
  XferMgrProgress.showTransferProgress(multipleFileUpload);
  // or block with Transfer.waitForCompletion()
  XferMgrProgress.waitForCompletion(multipleFileUpload);
} catch (AmazonServiceException e) {
  log.error(e.getErrorMessage());
  System.exit(1);
}
transferManager.shutdownNow();
private File convertMultiPartFileToFile(MultipartFile file) {
  File convertedFile = new File(file.getOriginalFilename());
  try (FileOutputStream fos = new FileOutputStream(convertedFile)) {
    fos.write(file.getBytes());
  } catch (IOException e) {
    log.error("Error converting multipartFile to file", e);
  }
  return convertedFile;
}

不确定这是否是正确的方法,请给我建议任何更改或指向我可以帮助您的文章。

0 个答案:

没有答案