我的 Java Spring 应用程序中的以下方法直接将文件流式传输并上传到 Amazon S3 存储桶。我研究过,使用流将使上传大文件(对于我的用例> 100MB 视频)更加内存有效。当使用 25MB 文件测试该方法时,Kubernetes 集群设置中 Java Spring 应用程序的内存使用量猛增了 200MB!我还尝试了一个 200MB 的文件,内存再次飙升至约 2GB。没有抛出内存不足异常,但内存使用量并没有下降。为什么会出现这种情况?
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
}
}
有多种方法可以处理大文件上传。
- 使用后台任务将字节数组写入磁盘并上传到 S3
或许。
- 存储在内存中并直接上传对象(bad bad
选项,除非您设置非常低的文件上传限制)
看一眼this https://github.com/bobbylight/file-upload-examplegit repo 关于如何实现上述方法
我在这里没有看到你的用例。但是,如果您还要处理 UI,请考虑使用直接从 UI 上传文件预签名 S3 URL https://medium.com/@aakashbanerjee/upload-files-to-amazon-s3-from-the-browser-using-pre-signed-urls-4602a9a90eb5.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)