servlet文件上传过大提示
当客户端上传一个较大的文件时 在文件还没完全上传到服务器时进入了自己的servlet doPost方法 然后通过request.getContentLength()方法获取上传内容的大小 当上传内容超过指定的大小时 out.write("{'state':'1'}"); 并return 再客户端提示。但我们发现点击上传时能立刻获取上传内容的大小 也就是request.getContentLength()能够立刻取到值,同时我的servlet方法也能立刻return出去 但是客户端仍然在将文件往服务器提交 也就是说 out.write("{'state':'1'}");在等待 request文件上传的结束才能做out.write操作 我试过 通过request.getInputStream().close(); 我甚至试过获取当前线程并stop(),但都仍无效 我也试着抛出异常 结果还是一样 一直要等到文件上传完才做下一步的事情,请求大牛们帮忙分析一下 ,如何获取文件大小后立即输出内容而不是等待文件上传完后再输出
------解决方案--------------------明白楼主的意思了,查过相关资料,询问过大牛,都说存在这种情况,但不绝对,可能跟浏览器有关(有些浏览器可能分多线程来执行,所以不会有明显影响)。另外,统一回答都是,这个传送是不可控的,前台JS有可判断大小的函数和方法,楼主百度一下。
------解决方案--------------------
不好意思我确实理解有问题,整天用框架没关注过这些底层知识,问了一下我们技术总监,浏览器会把整个表单数据转成协议标准数据发送给服务器,所以说这个的确是无法控制的,只有在服务器接受到这个请求中的contentlength以后才能做出控制。不过引入html5之后是可以很方便的控制的!