我正在尝试使用 Spring boot 将图像上传到 S3 Bucket,但出现以下错误:没有为流数据指定内容长度。流内容将在内存中缓冲,并可能导致内存不足错误。
文件存储.java
public void save(String path,
String fileName,
Optional<Map<String, String>> optionalMetadata,
InputStream inputStream) {
ObjectMetadata metadata = new ObjectMetadata();
optionalMetadata.ifPresent(map -> {
if (!map.isEmpty()) {
map.forEach(metadata::addUserMetadata);
}
});
try {
s3.putObject(path, fileName, inputStream, metadata);
} catch (AmazonServiceException e) {
throw new IllegalStateException("Failed to store file to s3", e);
}
}
服务.java
//get file Metadata
Map<String, String> metadata = extractMetadata(file);
//upload to S3 bucket
String path = String.format("%s/%s", BucketName.PROFILE_IMAGE.getBucketName(), id);
try {
filestore.save(path, "profileImage", Optional.of(metadata), file.getInputStream());
player.setPlayerProfileImageLink(path + "/profileImage.jpg");
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
private Map<String, String> extractMetadata(MultipartFile file) {
Map<String,String> metadata = new HashMap<>();
metadata.put("Content-type", file.getContentType());
metadata.put("Content-length",String.valueOf(file.getSize()));
return metadata;
}
我已经按照教程执行此操作,并且它工作了一段时间,但现在我总是遇到同样的错误,我不知道为什么。