具体情况:服务器带宽不大,上传小文件到服务器没问题,大一点的就不行了。
java.lang.RuntimeException: org.nutz.mvc.upload.UploadInvalidFormatException: Should not end stream
2016-02-05 18:06:47,350 [http-apr-9001-exec-4] WARN org.nutz.mvc.impl.processor.FailProcessor -Error@/data/app/edit :
java.lang.RuntimeException: org.nutz.mvc.upload.UploadInvalidFormatException: Should not end stream
at org.nutz.lang.Lang.wrapThrow(Lang.java:148)
at org.nutz.mvc.upload.UploadAdaptor.getReferObject(UploadAdaptor.java:205)
at org.nutz.mvc.upload.UploadAdaptor.getReferObject(UploadAdaptor.java:65)
at org.nutz.mvc.adaptor.AbstractAdaptor.adapt(AbstractAdaptor.java:216)
at org.nutz.mvc.upload.UploadAdaptor.adapt(UploadAdaptor.java:120)
at org.nutz.mvc.impl.processor.AdaptorProcessor.process(AdaptorProcessor.java:28)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.ActionFiltersProcessor.process(ActionFiltersProcessor.java:40)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:119)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:44)
at org.nutz.mvc.impl.ActionInvoker.invoke(ActionInvoker.java:67)
at org.nutz.mvc.ActionHandler.handle(ActionHandler.java:31)
at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:179)
at net.adm.web.filter.AdmNutFilter.doFilter(AdmNutFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2517)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2506)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.nutz.mvc.upload.UploadInvalidFormatException: Should not end stream
at org.nutz.mvc.upload.FastUploading.assertStreamNotEnd(FastUploading.java:241)
at org.nutz.mvc.upload.FastUploading.parse(FastUploading.java:183)
at org.nutz.mvc.upload.UploadAdaptor.getReferObject(UploadAdaptor.java:188)
... 37 more
@jellee chrome开发者工具,network,菜单栏可设置速度
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: NOT_FOUND
--------------需要限制文件大小--------------mm: STREAM_END
2016-02-14 09:49:30,206 [http-apr-8080-exec-8] WARN org.nutz.mvc.impl.processor.FailProcessor -Error@/data/app/edit :
java.lang.RuntimeException: org.nutz.mvc.upload.UploadInvalidFormatException: Should not end stream
at org.nutz.lang.Lang.wrapThrow(Lang.java:148)
这是用源码部署时自己加的日志,最后一个是STREAM_END。
我上传的是apk,大小大概是70M,局部代码如下:
@POST
@At
@AdaptBy(type = UploadAdaptor.class, args = { "${app.root}/WEB-INF/tmp", "8192", "utf-8", "20000", "209715200" })
@Ok("json")
public Object edit(
@Param("appFile") TempFile appFile,
还不能判断是流本身的问题还是nutz的问题, 试试appache的fileupload库吧
@AdaptBy(type=VoidAdaptor.class)
public Object edit(HttpServletRequest req) {
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List<FileItem> items = upload.parseRequest(request);
}
参考
https://commons.apache.org/proper/commons-fileupload/using.html
有个办法可以校验一下, 另外做一个方法,单独读流,看看能不能读够
@AdaptBy(type=VoidAdaptor.class)
public Object edit(HttpServletRequest req) {
byte[] buf = new byte[8192];
int count = 0;
int len = 0;
InputStream ins = req.getInputStream();
while (-1 != (len = ins.read(buf)) {
count += len;
}
log.info("read count=" + count);
}
@jellee 上传100m的时候count也对?