【网站编程技巧】一种十分简单高效的文本表单和文件一起提交的方法
2013-05-09 13:26
302 查看
<form action="uploadSourceFile.do"enctype="multipart/form-data" method="post" />
<input type="file" name="file" accept="application/msword"/> <input type="submit" value="上传" style="width:200px; border:1px solid #580000"></td> </form>以上代码是写在页面里的一个提交word文档的表单。为了说明此表单提交的是文件数据,我们使用了
enctype="multipart/form-data"
,但是设置了此项之后,如果我们将无法同时提交其他表单数据,比如有时候我们想把上传时候的当前用户名也传送给后台。
【网上的解决方案】
1. 用JS单击一个提交按钮,提交两个表单。 PS:我不知道这些人有没有测试,我是测试了,此方案无效,用JS提交,成功的只有最后一个。
比如: 把 document.form1.submit(); 和document.form2.submit()放在一起,只有form2会提交成功。(MYECLIPSE+JSP+TOMCAT6.0+CHROME)
2. 把enctype改成普通数据,然后在后台一个个的读取出来,分析,如果是文本数据就分解字符串获取出来,如果是文件就用文件类型读取出来。
我不知道enctype改成普通数据后,是否能提交文件,我用的DiskFileUpload这个类来后台处理的,是显示没有文件数据。网上有些代码,据说可以,但也十分复杂。我没测试。
因为我找到了另一个十分简单高效的方法。
【我的解决方案】
仔细看上面的那个表单,我们发现这个文件选择输入框有个属性叫做name,经过测试,这个name将会被一起提交到后台。而且这是个字符串,最好的要获取它十分方便,用fileItem.getFieldName()即可。
由于就一个字段,所以不加处理的话,一个表单只能提交一个字符串数据。为了支持多个文本数据同时提交。只需要把你的表单文本数据顺序的按照以下方法连接起来。
比如现有"hello world", "I love you", "Yes I will" 三个字符串数据。
只需要这样连接成一个字符串,两两之间用"="号连接即可:"hello world=I love you=Yes I will"
然后在后台,只需要用一个函数tang_Form就可以轻松获得每个字段的值。
【代码实例】
JSP/HTML 页面端:
<form action="uploadSourceFile.do"enctype="multipart/form-data" method="post" />
<input type="file" name="hello world=I love you=Yes I will" accept="application/msword"/> <input type="submit" value="上传" style="width:200px; border:1px solid #580000"></td> </form>
后台Java处理:
DiskFileUpload fileUpload = new DiskFileUpload();
List list = fileUpload.parseRequest(request);
Iterator iterator = list.iterator();
if(iterator.hasNext())
{
FileItem fileItem = (FileItem)iterator.next();//文件对象
String [] tang_form=FlowService.tang_Form(fileItem.getFieldName());//获取文件表单里的字段名
String helloworld=tang_form[0];//第一个表单文本数据
String iloveu=tang_form[1]; //第二个表单文本数据
String yesiwill=tang_form[2];//第三个表单文本数据
其中tang_Form 是我自己写的,支持动态数目的字段,你只要用=号连接就行,不需要告诉函数多少个字段。 以下是函数代码:
public static String [] tang_Form(String src_str) {//注意此方法传入的form表单数据里不能有 = 号; int field_num=0;//自动统计字段数目 for(int i=0;i<src_str.length();i++) { if(src_str.charAt(i)=='=') { field_num++; } } field_num++; String [] re_list=new String[field_num]; int field_num_point=0;//计数器指针 String temp=""; for(int i=0;i<src_str.length();i++) { if(src_str.charAt(i)=='=') { re_list[field_num_point]=temp; temp=""; field_num_point++; } else { temp=temp+src_str.charAt(i); } } re_list[field_num_point]=temp; return re_list; }当然您也可以自己写一个哦 ^_^
相关文章推荐
- 一种脱离VC编程软件的方法学习C/C++编程(搭建EditPlus实现在文本编辑框中执行.c文件
- 一种脱离VC编程软件的方法学习C/C++编程(搭建EditPlus实现在文本编辑框中执行.c文件)
- 简单解决 multipart/form-data 文件上传表单中 传递参数无法获取的办法! (解决办法:动态更改表单提交URL)
- Java基本功练习十四(字符串和文本IO【文件读写数据、字符串生成器、String类方法、相关技巧】)
- 多表单提交的一种解决方法
- 下载文件的一种简单方法js
- python高效编程技巧7(pickle的使用:可以将一个对象存储在一个文件中,或者load进来)
- 一起谈.NET技术,一种简单的直观的高效的权限设计
- python高效编程技巧9(如何读写csv文件)
- jsp转html,工具类,网站静态化的一种简单实现方法!
- Ajax异步提交表单数据简单方法
- 调用jupyter notebook文件内的函数一种简单方法
- 简单解决 multipart/form-data 文件上传表单中 传递参数无法获取的办法! (解决办法:动态更改表单提交URL)
- IE上提交表单,返回结果变成文件下载的解决方法
- 表单包含file上传文件提交,使用ajaxSubmint或者ajaxForm 遇到的问题以及解决方法
- httpurlconnection模拟post提交form表单(普通文本和上传文件) (
- EXCEL文件中的简单VB编程,基本的访问方法
- 简单高效防注入攻击的动态多参数、动态SQL语句拼接方法,提高网站的安全性
- llinux服务器文件共享的一种简单的方法
- 介绍一种在大循环就可实现的简单多任务编程方法