java - 并行流不适用于将多个文件上传到 aws s3
问题描述
以下方法被写入将文件并行上传到 AWS S3,但没有发生并行处理。上传30个文件需要30秒,上传50个文件需要50秒。我不确定为什么 parallel() 流在我的用例中不起作用。任何指针将不胜感激
public ConcurrentHashMap<String, String> uploadMyFiles(MultipartFile[] files, String prefix) {
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
Stream.of(files).parallel().forEach(file -> {
String fStatus = uploadMyFile(file, prefix);
map.put(file.getOriginalFilename(), fStatus);
});
return fileStatusMap;
}
public String uploadMyFile(final MultipartFile multipartFile, String prefix) {
try {
final File file = convertMPartFileToFile(multipartFile);
uploadToMyBucket("mybucket", file, prefix);
} catch (final AwsServiceException exception) {
return exception.getMessage()
}
return "OK";
}
private File convertMPartFileToFile(final MultipartFile multipartFile) {
final File file = new File(multipartFile.getOriginalFilename());
try (final FileOutputStream outputStream = new FileOutputStream(file)) {
outputStream.write(multipartFile.getBytes());
} catch (final IOException ex) {
LOGGER.error("log error here");
}
return file;
}
private String uploadToMyBucket(final String bucket, final File file, String fileKey) {
PutObjectResponse putObjectResult = s3Client
.putObject(PutObjectRequest.builder().bucket(bucket).key(fileKey).build(), RequestBody.fromFile(file));
final URL myfileUrl = s3Client.utilities().getUrl(GetUrlRequest.builder().bucket(bucket).key(fileKey).build());
return myfileUrl.toString();
}
解决方案
推荐阅读
- python - 如何减慢python程序的速度
- python - 为什么我的神经网络只能处理我的数据子集
- r - 为什么 dplyr 没有结合赋值和管道的功能?
- javascript - await 仅在异步函数 discord.js 中有效
- llvm - llc 抛出错误:constexpr 需要整数操作数
- html - 无法在同一行/行上添加表格和链接列表
- c++ - 如何在 docker 容器中查看 syslog (debian:buster)
- javascript - 为什么 JS 改变了发送的函数参数?
- python - AttributeError:“函数”对象没有属性“b64encode”
- typescript - 使用 TypeScript 声明自定义类型以及如何测试它?