Как загрузить изображения в ведро S3 - PullRequest
0 голосов
/ 30 января 2020

Для веб-сайта электронной коммерции, если у меня есть список продуктов, каждый из которых имеет 10 изображений. связан с ними. Как сохранить изображения в корзину S3, когда запрос поступает из пользовательского интерфейса (ReactJS) в серверную часть (Java). Я реализовал для создания корзины, в которой будет папка для каждого продукта с его изображениями в нем. Я создал роль политики доступа S3 к экземпляру ec2. Я использую AWS S3 SDK для взаимодействия с AWS S3. Я раскрыл API отдыха, используя список MultiPartResolver для хранения изображений, как показано ниже:

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

Не уверен, что это правильный подход, пожалуйста, предложите мне любые изменения или укажите на статью, которая может помочь.

...