无法使用 ajaxUpload() 上传大型 Excel 文件
Posted
技术标签:
【中文标题】无法使用 ajaxUpload() 上传大型 Excel 文件【英文标题】:Unable to upload large excel file with ajaxUpload() 【发布时间】:2013-04-05 07:04:10 【问题描述】:当尝试使用 AjaxUpload 导入 excel 文件时,小文件可以执行导入。使用包含接近 2MB 数据的稍大的 excel 文件,我收到以下错误。
这是我在 jsp 中的 ajaxUpload():
$.ajaxFileUpload(
url:'pi/importPI.do?custNamefrmList='+custNamefrmList+'&neNamefrmList='+neNamefrmList+'&bIndex='+bIndex+'+&fullPath='+fullPath+'',
type:"post",
secureuri:false,
fileElementId:'uploadfile',
method:'POST',
//dataType: 'json',
dataType: 'json',
cache:false,
async:false,
success: function (data)
2013 年 4 月 5 日下午 12:14:51 org.apache.catalina.core.StandardWrapperValve 调用 严重:servlet [dispatcher] 在路径 [/PMDB] 的上下文中的 Servlet.service() 引发异常 [请求处理失败;嵌套异常是 org.springframework.web.multipart.MultipartException:无法解析多部分 servlet 请求;嵌套异常是 org.apache.commons.fileupload.FileUploadBase$IOFileUploadException:处理 multipart/form-data 请求失败。连接重置] 有根本原因 java.net.SocketException:连接重置在 java.net.SocketInputStream.read(SocketInputStream.java:168) 在 org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:532) 在 org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:501) 在 org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:563) 在 org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:118) 在 org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:341) 在 org.apache.coyote.Request.doRead(Request.java:422) 在 org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290) 在 org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:431) 在 org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:315) 在 org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:200) 在 org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976) 在 org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886) 在 java.io.InputStream.read(InputStream.java:85) 在 org.apache.commons.fileupload.util.Streams.copy(Streams.java:96) 在 org.apache.commons.fileupload.util.Streams.copy(Streams.java:66) 在 org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:366) 在 org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126) 在 org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:155) 在 org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:138) 在 org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:904) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:747) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run(Thread.java:662)
【问题讨论】:
那么问题是它不适用于任何大文件,还是仅适用于大 Excel 文件? 【参考方案1】:我认为这只是阻止上传 > 2 MB 的默认 Tomcat POST 大小限制。
在这里查看解决方案:
http://vicker313.wordpress.com/2010/08/12/increase-or-make-unlimited-maximum-post-size-in-tomcat/
【讨论】:
以上是关于无法使用 ajaxUpload() 上传大型 Excel 文件的主要内容,如果未能解决你的问题,请参考以下文章
jQuery AjaxUpload中文使用API和demo示例