FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决

来源:互联网 发布:淘宝旧版本4.1.2下载 编辑:程序博客网 时间:2024/05/20 19:15

一 是网上大部分都说的一种做法。 二是此人琢磨出的一种做法。


一.  今天在原来上传文件页面的基础上,想添加一段文件的简介

因为同时要上传文件,所以ENCTYPE="multipart/form-data" 必须要加在form里面

可是这样的话,我再servlet里面用request.getParameter()方法无论如何都只是获得null值,

不是一般的郁闷,百度了一下,有人出现了同样的问题可是它用的是jspsmartupload组件实现文件上传的,

而我用的commons fileupload组件,仔细看了一下这个组件的api,可是英语太差了,没有发现相关的信息

我又尝试用session传递参数,可是发现有点麻烦,因为在表单提交之时你就得赋给session表单上它的数值,

还有一种方法就是使用jspsmartupload表单中enctype="multipart/form-data"的意思,是设置 表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了 multipart/form-data,才能完整的传递文件数据

但是设置了 enctype="multipart/form-data" ,除了file类型表单能获取到,其他value通过request.getParameter都得不到。这种情况下我们可以利用组件来解决该问题,例如用 jspsmartupload组件

   com.jspsmart.upload.SmartUpload su = new   com.jspsmart.upload.SmartUpload();
   su.initialize(pageContext);
   su.service(request, response);
   su.setTotalMaxFileSize(100000000);
   su.setAllowedFilesList("zip,rar");
   su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
   su.upload();

   String Name = su.getRequest().getParameter("Name");
   String TYPE_ID = su.getRequest().getParameter("Type");

通过 su.getRequest().getParameter("value");就可以了,su.upload()好象必须放在前面,测试中将su.upload()放在获取参数后面不成功。



enctype=/"multipart/form-data/"是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功
,
取表单值加入数据库时,用到下面的:
 SmartUpload su = new SmartUpload();//新建一个SmartUpload对象
 su.getRequest().getParameterValues();取数组值
 su.getRequest().getParameter( );取单个参数单个值

二.  

<form action="${ctx}/upload2.jsp" id="form1" name="form1" encType="multipart/form-data"  method="post" target="hidden_frame" onsubmit="return validForm(this)" ><table><tr><td>缩略图:</td><td><img src="" width="80" height="80"/></td><td><input type="hidden" name="type" id="type" value="1"/><input type="file" id="file" name="file" /><INPUT type="submit" value="上传文件"><span id="msg"></span><br/><font color="red">支持JPG,JPEG,GIF,BMP文件的上传</font></td></tr></table>    <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe></form>


<script type="text/javascript">    function validForm(fm){       fm.action = fm.action + "?type=" + fm['type'].value;       return true;    }</script>

这样也可以将值传过去。