Java 通过流媒体将多部分文件上载到Amazon S3时内存使用率高?
在我的JavaSpring应用程序中,下面的方法直接将文件流式传输并上传到AmazonS3存储桶。我已经研究过,使用流将使上传大文件(我的用例中大于100MB的视频)的内存效率更高。使用25MB文件测试该方法时,我的Java Spring应用程序在Kubernetes集群设置中的内存使用量增加了200MB!我还尝试了一个200MB的文件,内存再次增加到~2GB。没有引发内存不足异常,但内存使用率不会下降。为什么会发生这种情况Java 通过流媒体将多部分文件上载到Amazon S3时内存使用率高?,java,spring,amazon-s3,file-upload,kubernetes,Java,Spring,Amazon S3,File Upload,Kubernetes,在我的JavaSpring应用程序中,下面的方法直接将文件流式传输并上传到AmazonS3存储桶。我已经研究过,使用流将使上传大文件(我的用例中大于100MB的视频)的内存效率更高。使用25MB文件测试该方法时,我的Java Spring应用程序在Kubernetes集群设置中的内存使用量增加了200MB!我还尝试了一个200MB的文件,内存再次增加到~2GB。没有引发内存不足异常,但内存使用率不会下降。为什么会发生这种情况 public void uploadFile(MultipartFil
public void uploadFile(MultipartFile file, String saveFileName) {
try {
ObjectMetadata metadata = new ObjectMetadata();
if (file.getContentType() != null){
om.setContentType(file.getContentType());
}
metadata.setContentLength(file.getSize());
saveFileName = saveFileName.replaceAll(" ", "");
InputStream stream = file.getInputStream();
PutObjectRequest request = new PutObjectRequest(bucketName, saveFileName, stream, metadata);
request = request.withMetadata(om);
s3client.putObject(request);
stream.close();
} catch (AmazonClientException | IOException exception) {
// handle exception
}
}
有多种方法可以处理大型文件上载
我在这里看不到您的用例。但是如果你正在处理UI,也可以考虑使用.t/p>直接从UI上传文件。谢谢你参考我的Git RePO。它帮助我回答了很多问题。我可能会使用预先签名的S3URL路由:)您应该将stream.close()放在finally块中。祝您今天过得愉快!请看一下我的答案,它使用S3OutputStream,如果流太大,它会自动切换到多部分上传。当前使用10MB的缓冲区,但可以将其配置为更小/更大。