打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
怎么用同一个表单上传文件和提交非文件性的数据
回答1:
form设置了enctype='multipart/form-data' 属性后,就是2进制传输数据了 
form里面的input的值传过去的不过是以2进制的方式,所以request就得不到值了。
这是一个java的BUG.不管用什么语言处理文件表单,form的POST方法提交的数据都是在标准输入中,C/c++,perl这些语言都是要求程序员自己从标准输入中读取数据再处理的,象php,asp,c#这些语言就提供了写好的组件,他们把文件放处理好放在一个内存区,把字段也处理好放在一个内存区,这样你用不同的方法就可以从相应的地方取到了你要的内容。

JSP是怎么处理的呢 它在用request.getParameter('xxxx');把标准输入中的内容全部读出来,只取那些字段内容.关于文件内容的那些数据就不要了.大家知道标准输入是一个buffer,一旦读过一次,下面再读就没有了,所以当你request.getParameter ('xxx');再读文件就取不到了.而目前市场上提供jsp文件上传组件的程序中,获得文件内容也是犯了同样的错误.他们只把文件
那一段的数据读出来,字段那一段数据就不要了,所以读取文件后request对象中的内容也空了。

知道了这个原因,就好解决了.我们可以作自己来写,用两个地方同时把request.getInputStream()的所有数据都放在它相应的地方,先用一个Hashtable把所有字段的name和value压进去,同时把文件源数据放在DataInputStream中,同时提交多少文件(在读数据源时每读到一行Content-Type就说明有一个文件)就保存几个DataInputStream,这样再用一个 request.getFile()从内存中的DataInputStream中取得文件内容返回给调用者.

2014-07-28 so1269wc

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
活字格使用教程之从既存的Excel表单创建新项目
FileItem类
深入理解Java中的流(Stream)
Python基础教程:一次性搞定 Django Form
Java I/O系统基础知识
jsp用户上传头像、上传图片、邮件上传附件代码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服