当前位置: 首页 > 知识库问答 >
问题:

无法在Spring boot 2中上传1gb文件

璩慎之
2023-03-14

我正在尝试上传1gb的视频文件。但是服务器不允许上传它。

它返回以下错误:

15:46:02.164 [http-nio-8085-exec-10] ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/broadcast].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [/broadcast] threw exception [Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space] with root cause
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3745) ~[?:?]
    at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:120) ~[?:?]
    at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:95) ~[?:?]
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:156) ~[?:?]
    at org.springframework.util.StreamUtils.copy(StreamUtils.java:143) ~[spring-core-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.util.FileCopyUtils.copy(FileCopyUtils.java:110) ~[spring-core-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.util.FileCopyUtils.copyToByteArray(FileCopyUtils.java:162) ~[spring-core-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.getBytes(StandardMultipartHttpServletRequest.java:245) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]

我在执行以下代码时遇到此错误:

File file = new File(multipartFile.getOriginalFilename());
FileOutputStream fos = new FileOutputStream(file);
fos.write(multipartFile.getBytes());
fos.close();

在java文件中。

下面是我的"SpringToolSuite4.ini"档案

-startup
plugins/org.eclipse.equinox.launcher_1.5.400.v20190515-0925.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1000.v20190125-2016
-product
org.springframework.boot.ide.branding.sts4
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM

共有2个答案

劳鹏云
2023-03-14

这里有两个问题

>

  • 您看到的错误是由于您的jvm设置。检查您的内存设置。(-Xms和-Xmx)

    默认情况下,您不能在springboot中上传这么大的文件。您需要增加默认限制(10 MB)

    在Spring Boot 2.0之前:

    spring.http.multipart.max-file-size=-1
    spring.http.multipart.max-request-size=-1
    

    在Spring Boot 2.0之后:

    spring.servlet.multipart.max-file-size=-1
    spring.servlet.multipart.max-request-size=-1
    

    -1表示没有限制。强烈建议不要使用-1,而是使用特定值。

  • 侯英达
    2023-03-14

    这是由于JVM分配,当你试图上传1G文件时,实际上你只为你的JVM分配1G,而< code>getBytes()会将所有数据复制到你的内存中,但实际上没有足够的内存。

    所以方法是1)您可以尝试为您的JVM分配更多内存,但这真的不建议。2)这里有一个很好的问题/答案,也许更适合您的案例:SpringBoot:使用Apache Commons FileUpload进行大型流文件上传

     类似资料:
    • 我无法上传文件在硒网络驱动程序....我的代码在这里:驱动程序。FindElement(By.XPath(“/html/body/div[2]/div[5]/div/div/div/div/div[2]/div[2]/div[1]/div/div/div[1]”))).发送密钥(“E:/QA/上传测试图片/dreamstime_xl_11004542-复制.jpg”); **我收到错误**:Sys

    • 当我运行下面的函数时,它下载源文件大约3分钟,然后关闭会话,即使一个1-1.6GB的文件只下载了38-41MB(变化)。 从Paramiko日志文件中可以看出,SSh连接在SFTP会话关闭时保持打开状态: DEB[20120913-10:05:00.894]Thr=1帕拉米科。运输:切换到新键...DEB[20120913-10:05:06.953]Thr=1 Paramiko。传输:重新密钥(命

    • 问题内容: 我制作了一个脚本,该脚本使用$ .ajax和FormData将两个表单对象传递给PHP。一个表单对象是文本,另一个是文件。它作为独立脚本运行良好。但是,将其作为插件添加到Wordpress后,它一直给我。 我不能序列化formdata,仅仅是因为那样我将无法将文件传递给PHP中的回调函数。 ajax调用之前涉及FormData的JS: 上面的这一部分是100%正确的。 Ajax呼叫:

    • 我使用这个网络服务上传一个文件使用泽西 //省省吧 //将上传的文件保存到新位置 当我执行我的代码我得到一个405错误!对这个问题有什么建议吗?

    • 当我试图上传文件到泽西岛时,我发现下面有一些异常,请帮助我解决。谢谢 html文档:- 阿贾克斯:- Java代码:- 例外情况:- 2015年6月17日下午7:55:34组织。阿帕奇。卡塔琳娜。果心StandardWrapperValve调用 请求头:-

    • 在此处输入图像描述 其失败错误如下:线程名:jp@gc-终极线程组2-4示例开始:2021-02-04 17:28:44 IST加载时间:562连接时间:0延迟:562大小以字节为单位:595发送字节:84568头大小以字节为单位:446主体大小以字节为单位:149示例计数:1错误计数:1数据类型(“text”“bin”“”):文本响应代码:500响应消息: HTTPSampleResult字段: