request.getContentLength() 取到的总是 198

做一个上传,如果正常上传可以使用,但是如果不选择文件,直接点上传,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"]



This page for FileUpload


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没有或者异常就是没有咯