对于一个电子商务网站,如果我有一个产品列表,每个产品都有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;
}
不确定这是否是正确的方法,请给我建议任何更改或指向我可以帮助您的文章。