rock学习园地

快乐地生活
posts - 10, comments - 6, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
      前几天做了个文件上传的页面,发现SmartUpload挺好用的,但是需要把form设置为enctype="multipart/form-data",然后转到action页面后用request.getParameter的方法获取文本域的值居然获取不到。在网上找了半天都没找到。后来想了一个办法,把页面分成了两个form,一个用来上传文件,把action指向form中的一个ifram。另外一个form单独负责文本域值的提交。点击submit后,用js来控制,先提交上传文件的form,然后等文件上传完毕,再提交文本域的form。
     这种模式似乎也有一个好处,可以在选中文件后,填写表单域值的时候同时上传文件,文件上传完毕后就可以直接提交页面,似乎有点类似gmail的附件上传效果。我用gmail邮箱发邮件的时候,碰到大的附件,一般就是先选中附件上传,在传附件的过程中,写邮件的正文,这样邮件写完后,附件也差不多传上去了。

     然而今天无意间搜到网上的一篇文章,发现用smartupload,文件和文本是可以同时提交的。下面是这篇文章所说的方法。
---------------------------
     表单中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()放在获取参数后面不成功。


评论

# re: 用SmartUpload上传文件获取文本域值的问题  回复  更多评论   

2008-08-10 10:54 by 隔叶黄莺
用了 Struts 为什么还要用 SmartUpload 上传组件呢?Struts 自已带的上传组件还更好些。

SmartUpload 上传文件不能提交给 Action 是因为对于 *.do 的请求,Struts 的 RequestProcessor(好像是 performMultipart() 方法) 对请求会处理一次,等到 SmartUpload(initialize(pageContext);
) 对请求再次处理的时候就全乱了。

所以 SmartUpload 和 Struts 要隔离开的。

# afdasfda[未登录]  回复  更多评论   

2015-12-14 19:26 by ada
大家好!作为一名软件工程师,我很荣幸能成为这次项目的项目经理,好高兴和大家合作!!

只有注册用户登录后才能发表评论。


网站导航:
 
欢迎光临 悦丝茶坊:http://www.yuesitea.cn
欢迎光临 IE沙龙:http://www.iesalon.com.cn