FileUpload异常:Processing of multipart/form-data request failed. Stream ended unexpectedly

使用Apache common fileupload 1.2.1时出现下面异常(当上传相对较大的文件时):

2009/07/22 12:55:01 org.apache.catalina.core.AprLifecycleListener init
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:/Java/jdk1.6.0_10/bin;.;D:/WINDOWS/Sun/Java/bin;D:/WINDOWS/system32;D:/WINDOWS;D:/Java/jdk1.6.0_10/jre/bin;D:/Java/jdk1.5.0_06/bin/../jre/bin/client;D:/Java/jdk1.5.0_06/bin/../jre/bin;D:/Java/apache-ant-1.7.1/bin;D:/Java/grails-1.1.1/bin;D:/Java/groovy-1.6.3/bin;D:/Program Files/CodeGear/RAD Studio/6.0/bin;D:/Documents and Settings/All Users/Documents/RAD Studio/6.0/Bpl;D:/ruby/bin;D:/Java/jdk1.5.0_06/bin;D:/WINDOWS/system32;D:/WINDOWS;D:/WINDOWS/System32/Wbem;D:/AppServ/Apache2.2/bin;D:/AppServ/php5;D:/Program Files/CVSNT/
2009/07/22 12:55:01 org.apache.coyote.http11.Http11Protocol init
情報: Coyote HTTP/1.1を http-8081 で初期化します
2009/07/22 12:55:01 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 390 ms
2009/07/22 12:55:01 org.apache.catalina.core.StandardService start
情報: サービス Catalina を起動します
2009/07/22 12:55:01 org.apache.catalina.core.StandardEngine start
情報: Starting Servlet Engine: Apache Tomcat/6.0.18
2009/07/22 12:55:03 org.apache.cxf.transport.servlet.CXFNonSpringServlet loadBusNoConfig
情報: Load the bus without application context
2009/07/22 12:55:05 org.apache.cxf.transport.servlet.AbstractCXFServlet replaceDestinationFactory
情報: Replaced the http destination factory with servlet transport factory
2009/07/22 12:55:05 org.apache.cxf.endpoint.ServerImpl initDestination
情報: Setting the server's publish address to be /SystemSrvc
2009/07/22 12:55:06 org.apache.cxf.endpoint.ServerImpl initDestination
情報: Setting the server's publish address to be /UserSrvc
2009/07/22 12:55:06 org.apache.cxf.endpoint.ServerImpl initDestination
情報: Setting the server's publish address to be /PublicSyllabusSrvc
2009/07/22 12:55:06 org.apache.cxf.endpoint.ServerImpl initDestination
情報: Setting the server's publish address to be /InformationSrvc
2009/07/22 12:55:06 org.apache.cxf.endpoint.ServerImpl initDestination
情報: Setting the server's publish address to be /MasterSrvc
2009/07/22 12:55:06 org.apache.cxf.endpoint.ServerImpl initDestination
情報: Setting the server's publish address to be /CustomerSrvc
2009/07/22 12:55:07 org.apache.cxf.endpoint.ServerImpl initDestination
情報: Setting the server's publish address to be /InteruseSyllabusSrvc
2009/07/22 12:55:12 org.apache.catalina.core.ApplicationContext log
情報: ContextListener: contextInitialized()
2009/07/22 12:55:12 org.apache.catalina.core.ApplicationContext log
情報: SessionListener: contextInitialized()
2009/07/22 12:55:13 org.apache.coyote.http11.Http11Protocol start
情報: Coyote HTTP/1.1を http-8081 で起動します
2009/07/22 12:55:13 org.apache.jk.common.ChannelSocket init
情報: JK: ajp13 listening on /0.0.0.0:8009
2009/07/22 12:55:13 org.apache.jk.server.JkMain start
情報: Jk running ID=0 time=0/32  config=null
2009/07/22 12:55:13 org.apache.catalina.startup.Catalina start
情報: Server startup in 11590 ms
log4j:WARN No appenders could be found for logger (org.apache.xml.security.signature.Reference).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN No appenders could be found for logger (org.apache.xml.security.signature.Reference).
log4j:WARN Please initialize the log4j system properly.
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:367)
 at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
 at com.nauproject.apm.servlet.FileUploadServlet.processRequest(FileUploadServlet.java:71)
 at com.nauproject.apm.servlet.FileUploadServlet.doPost(FileUploadServlet.java:55)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.nauproject.apm.filter.NoCacheFilter.doFilter(NoCacheFilter.java:45)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
 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:128)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
 at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:983)
 at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
 at java.io.InputStream.read(InputStream.java:85)
 at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
 at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
 at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:362)
 ... 26 more

来张贴图:

图1

网上有人说是fileupload组件的Bug。我因为一时没能找到解决的办法,于是改用smartupload。无奈该组件已经很久不维护,官网都打不开了。

代码如下:

 

smartupload一共有6个文件,我把源代码贴出来好了。

ServletUpload.java

SmartFile.java

SmartFiles.java

SmartRequest.java

SmartUpload.java

SmartUploadException.java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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异常的方法有多种,需要根据具体情况进行具体分析和处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值