当前位置: 首页 > 面试题库 >

Java Heap Space不足以在AWS S3上上传文件

孟永望
2023-03-14
问题内容

我正在尝试使用Java-AWS API在AWS
S3上上传文件。问题是我的应用程序无法上传大型文件,因为堆已达到极限。错误:java.lang.OutOfMemoryError:Java堆空间

我个人认为扩展堆内存不是永久性的解决方案,因为我必须上传最大100 GB的文件。我该怎么办 ?

这是代码片段:

        BasicAWSCredentials awsCreds = new BasicAWSCredentials(AID, Akey);
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
        .withRegion(Regions.fromName("us-east-2"))
        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
        .build();

        InputStream Is=file.getInputStream();

        boolean buckflag = s3Client.doesBucketExist(ABuck);
        if(buckflag != true){
           s3Client.createBucket(ABuck);
        }
        s3Client.putObject(new PutObjectRequest(ABuck, AFkey,file.getInputStream(),new ObjectMetadata() ).withCannedAcl(CannedAccessControlList.PublicRead));

问题答案:

我强烈建议setContentLength()on ObjectMetadata,因为:

..如果未提供,则库将必须 缓冲 输入流的内容才能对其进行计算。

(..可预料的是,这将导致“足够大”的文件上的内存不足。)

来源:PutObjectRequest
javadoc

应用于您的代码:

 // ...
 ObjectMetadata omd = new ObjectMetadata();
 // a tiny code line, but with a "huge" information gain and memory saving!;)
 omd.setContentLength(file.length());

 s3Client.putObject(new PutObjectRequest(ABuck, AFkey, file.getInputStream(), omd).withCannedAcl(CannedAccessControlList.PublicRead));
 // ...


 类似资料:
  • 我想将文件从一台服务器上传到另一台FTP服务器,以下是我的上传文件代码,但它抛出错误为: 远程服务器返回错误:(550)文件不可用(例如,找不到文件,无法访问)。 这是我的代码: 你能告诉我哪里出了问题吗?

  • 我是android应用程序开发的新手,试图开发一个web视图应用程序,但似乎无法让文件上传工作。。。请帮忙 这是我的网页视图代码 公共类WebActive扩展了活动{ } 所以我在wv下添加了这个代码。setWebChromeClient//未记录的魔术方法覆盖//br>//如果您尝试在此处放置@override,Eclipse将对您发誓//Android 3.0 public void open

  • 使用Quickstart应用程序iOS我能够让Google Drive浏览文件和文件夹、显示图标和缩略图以及下载文件。但是,在上传时,我会遇到以下错误: 发生错误:错误域=com。谷歌。GTLRErrorObjectDomain代码=403“权限不足”用户信息={GTLRStructuredError=GTLRErrorObject 0x61800024ff90:{消息:“权限不足”错误:[1]代

  • 我正在开发一个带有文件上传的web应用程序。 我只是写了一个PHP代码来上传一个图像。 当我运行此代码时,我可以在文件上传时获得输出,如果上传错误 我给了777权限来访问pic文件夹 有什么问题,有什么想法吗,, 类型 Print_R 数组 谢啦

  • 本文向大家介绍C#实现文件上传以及多文件上传功能,包括了C#实现文件上传以及多文件上传功能的使用技巧和注意事项,需要的朋友参考一下 一、前端搭建 1、前端用到js:uploadify(下载地址:http://www.uploadify.com/download/)、layer (下载地址:http://layer.layui.com/),下载之后把它们放在你的项目里 列如 2、根据你的需要在你项目

  • getFileStream光将文件转换为字符串就需要特别长的时间,再到切片,而且上传上去的文件比原来大了,再下载下来也不对