上传文件报错:Processing of multipart/form-data request failed. Stream ended unexpectedly

web项目中,本地开发环境上传大文件没有问题,但是部署到服务器后上传大文件却不可以,看了服务器上tomcat下产生的日志,错误信息为:

2017-08-16 12:58:55,164-[OUT-WARN] http-9080-10 org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest[64] - Unable to parse request
org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parseRequest(JakartaMultiPartRequest.java:189)
at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.processUpload(JakartaMultiPartRequest.java:127)
at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parse(JakartaMultiPartRequest.java:92)
at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:81)
at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:803)
at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:134)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.founder.fwpt.servlet.ProcessFilter.doFilter(ProcessFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:347)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:1005)
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)
at java.io.InputStream.read(InputStream.java:82)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347)
... 23 more

一开始认为是网络的原因,网络超时而没有上传成功,然后百度寻找解决办法,如下:

1、首先,上传页面上面的 form 标签要设enctype="multipart/form-data" 参数

2、修改tomcat配置文件server.xml:

<Connector port="8086" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
将上面的参数disableUploadTimeout值改为false即可。

3、修改了tomcat配置文件server.xml中的另外一处:

<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" /> 在里边加入disableUploadTimeout="false"一句。

以上解决方法在我的程序中已经设置,所以仍然不能解决问题。

然后无意中查看页面和js代码,发现一个问题:添加信息页面,在点击保存按钮后进行表单验证再form提交,然后提示添加成功信息,关闭添加tab页面,刷新list列表数据,但这就存在一个问题,如果上传文件过大就会导致文件没有上传完成而直接跳转到了list列表页面,进而导致上传失败。

解决方法:form提交后,不提示信息刷新数据,在页面重新加载的时候在进行提示、刷新。



问题解决。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这个错误提示是处理multipart/form-data请求时出现了问题,具体是java.io.eofexception异常。这个异常表示在读取输入流时,已经到达了流的末尾,但是还在尝试读取数据,导致读取失败。可能是请求中的数据不完整或者格式不正确导致的。需要检查请求数据的完整性和格式是否正确,或者检查代码中处理请求的部分是否有问题。 ### 回答2: multipart/form-data是一种常见的表单数据格式,由于其文件上传的功能在Web开发中被广泛使用。当使用Java编程语言处理multipart/form-data请求时,可能会遇到“processing of multipart/form-data request failed. java.io.eofexception”错误。 在Java中,通过使用Apache Commons FileUpload库来处理表单数据。该库提供了一个FileUpload类,该类可以从HTTP请求中提取并解析文件上传表单数据。 使用FileUpload类将multipart/form-data请求解析为文件,其中每个文本域和文件域都可以包含一个或多个值。此外,它还提供了一个InputStream,用于读取文件上传的内容。 然而,在处理multipart/form-data请求时,如果遇到EOFException,表示程序已经读取完毕,但仍没有获得正确的数据。通常,这是由于客户端突然关闭了连接或上传过程中出现了网络问题。 为了解决EOFException,在处理multipart/form-data请求时,可以添加一个try-catch块来捕获EOFException异常并处理它。另外,还可以使用检查和校验数据来确保multipart/form-data请求的完整性和正确性。 总之,处理multipart/form-data请求的过程可能会出现一些异常,而EOFException是其中的一种。在处理multipart/form-data请求时,我们需要仔细检查和校验数据,并进行适当的错误处理,以确保Web应用程序的安全和稳定性。 ### 回答3: multipart/form-data 是一种常见的 HTTP 请求数据格式,在这种格式下,HTTP 请求被分成多个部分进行传输。这些部分在传输过程中是以二进制的形式进行拼接的。在 Java 应用程序中,我们可以使用 Servlet API 提供的 Part 接口和 MultipartConfig 注解来处理 HTTP 请求中的 multipart/form-data 数据。 然而,当处理 multipart/form-data 请求时,有时会出现 “processing of multipart/form-data request failed. java.io.eofexception” 这样的异常。 其中,EOF 代表的是 End of File,也就是文件结束的标志。在 Java 中,IOException 是常见的输入输出异常,是由于在处理 IO 流时出现错误所导致的。 在处理 multipart/form-data 请求时,通常会使用 InputStream 类中的 read() 方法读取二进制数据。当请求中的二进制数据被读取完毕后,InputStream 会返回 -1 作为文件结束的标志。EOFException 的出现就是因为程序试图从 InputStream 读取不存在的数据。 造成这个问题的原因可能是由于传输的 multipart/form-data 请求数据不完整或者没有读取完全,从而造成解析时出现 EOFException 异常。也有可能是单个文件或者多个文件某个文件大小过大,超出了程序可以处理的限制。 解决该问题的方法可以尝试增加可读取数据的大小,修改应用程序中的配置文件,或者更改所使用的框架或 API。可以使用支持大文件传输处理的第三方框架,如Apache FileUpload和Spring MultiPart File,或者将数据上传至云存储并使用链接进行访问以避免超出应用限制的问题。 综上所述,解决 “processing of multipart/form-data request failed. java.io.eofexception” 异常的方法有多种,需要根据具体情况进行具体分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值