做一个上传,如果正常上传可以使用,但是如果不选择文件,直接点上传,request.getContentLength() 取到的长度是198,
这是api上写的" an integer containing the length of the request body or -1 if the length is not known"
[b]问题补充:[/b]
同样不选文件,直接点击上传,request.getContentLength() 取到的长度有时198 有时是196
[b]问题补充:[/b]
现在该怎么通过 request.getContentLength() 来判断上传的是 空呢
感谢楼下两位
[b]问题补充:[/b]
虽然问题还没有很好的解决,但仍谢谢yourgame这么热心.
这个不难,一般是通过脚本来做.
放一个隐藏域比如<input type=hidden name="filesize" value=""
点击提交按钮的时候,用js判断一下,如果没有选择文件,就将这个隐藏域的值设置成0,然后在服务器端判断这个值是0的话就可以知道没有文件了.
如果你提交的表单包含了其他参数呢..getContentLength指的是整个请求的长度.
如果发觉自己没有提交其他的表单参数,可以用抓包工具分析一下,下载一个httpanalyzer,启动一下,然后提交一下请求,可以看到客户端向服务器发送的所有数据
一般每一个请求都会包含很多默认的内容的.
你可以用request.getParameterNames();获得所有的请求参数名
然后用 request.getParameter()分别获得请求参数名的值
不需要使用抓包工具那么复杂
你可以不理会他的长度呀.你上传是有参数名称的呀
比如
你到后台只判断upload有没有东西就可以了.你不用理会其他的100多个参数是做什么的
对于一个只有提交表单跟按钮的界面:
[code="java"]
Choose the file for uploading:
[/code]
我不选择任何的文件然后提交上去,抓包分析的结果是:
[code="java"]
-----------------------------10383149458909
Content-Disposition: form-data; name="fileforload"; filename=""
Content-Type: application/octet-stream
-----------------------------10383149458909
Content-Disposition: form-data; name="submit"
commit
-----------------------------10383149458909--[/code]
对于http协议来说:
-----------------------------10383149458909
这个是随机生成的字符串,用来分割不同参数.
Content-Disposition: form-data; name="fileforload"; filename=""
这一行表示表单的名字
Content-Type: application/octet-stream
这行表示参数类型,文件提交的时候是一个流的形式
Content-Disposition: form-data; name="submit"
commit
这个其实是提交按钮的名字跟值.
===================分割线===============
在你不选择任何文件的情况下,应该也是类似的情况.
PS楼上的,这个用request.getParameterNames();分析不出任何长度出来的.
哎呀,你在服务端读取你上传的文件,有流就ok没有或者异常就是没有咯