NutzCN Logo
问答 上传提示 UploadInvalidFormatException: Should not end stream
发布于 3243天前 作者 jellee 2290 次浏览 复制 上一个帖子 下一个帖子
标签:

具体情况:服务器带宽不大,上传小文件到服务器没问题,大一点的就不行了。
java.lang.RuntimeException: org.nutz.mvc.upload.UploadInvalidFormatException: Should not end stream

24 回复

完整出错信息及出错之前的日志

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

报错之前的日志呢?? 是不是前面还有nginx/apache httpd之类的?

只用tomcat服务器而已了

nutz版本是什么?tomcat版本是什么? 本地可否重现(Chrome控制台可以模拟网速)

我刚刚测试了2kb/s上传也正常

nut-1.r.54
apache-tomcat-7.0.67
请教一下,如何控制上传速度?

@jellee chrome开发者工具,network,菜单栏可设置速度

我在本地测试的时候,network 设置了Custom 10Kb/s,这个只对服务器响应速度有作用,没找到地方可以设置提交数据的速度,测试不了上传。

--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------作为提交值读取--------------
--------------需要限制文件大小--------------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

服务器我试了少于50Mb的都可以上传,大概50Mb就不行了。本地测试什么样都可以。

服务器我试了少于50Mb的都可以上传,大于50Mb就不行了。本地测试什么样都可以。

什么服务器?是不是服务商做了限制??

有个办法可以校验一下, 另外做一个方法,单独读流,看看能不能读够

@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);
}

打印了,上传不同的apk,count在50多M左右。

@jellee 上传100m的时候count也对?

记得好像运营商会限制的,系统默认好像是50m

谢谢大家,找到原因了。
情况:
1) 服务器网速慢
2) 用chrome调试,ajax请求15秒后就没响应
原因:直接全文搜索,找出自己N多年前js封装的timeout,的确有15秒设置。

哈哈,找到原因就好

添加回复
请先登陆
回到顶部