如何提交表单file 与text 并获取其中的值

2024-11-24 10:26:26
推荐回答(1个)
回答1:

很多同学在编程的时候会经常用到file框 ,即input type="text",但经常会有文本框与文件框共同使用的情况,在使用enctype="multipart/form-data"之后,后台就无法用requet.getParameter获得text里面的参数,最近在练习的时候也遇到了这种情况,再百度查询之后终于解决了这个问题,希望我的经验能够帮到遇到同样问题的同学。
我先解释一下我想要达到的功能,我想写一个表单,根据其中两个文本框的内容将文件名更新到数据库中,前端是这个样子:

代码是这样
我想在servlet中获得两个文本框中的内容,也要获得上传文件的文件路径,怎么做呢?上代码
String columnname=null;
String columnvalue=null;

HashMap extMap = new HashMap();
extMap.put("image", "gif,jpg,jpeg,png,bmp");
extMap.put("flash", "swf,flv");
extMap.put("media", "swf,flv,mp3,mp4,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,avi,mp4");
//最大文件大小 默认1M 单位是字节
long maxSize = 20000000;
//绝对路径
String savePath = this.getServletConfig().getServletContext().getRealPath("/")+ "\\upload";
File tempDirPath = new File(savePath);
if (!tempDirPath.exists()) {
tempDirPath.mkdirs();
}
//相对路径
String saveUrl = "upload/";
File dirFile = new File(savePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
// 1.创建磁盘文件工厂
DiskFileItemFactory fac = new DiskFileItemFactory();
// 2.创建servlet文件上传组件
ServletFileUpload upload = new ServletFileUpload(fac);
// 3.文件列表
List fileList = null;
// 解析request从而得到前台传过来的文件
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
ex.printStackTrace();
return;
}

// 便利从前台得到的文件列表
Iterator it = fileList.iterator();

while (it.hasNext()) {
FileItem item = it.next();
String fileName = item.getName();
long fileSize = item.getSize();
// 如果不是普通表单域,当做文件域来处理
if (!item.isFormField()) {
//检查文件大小
//System.out.println(item.getSize());
BufferedInputStream in = new BufferedInputStream(item.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(new File(dirFile + "\\"
+ item.getName())));
System.out.println(saveUrl+item.getName());

Streams.copy(in, out, true);
}else if("columnName".equals(item.getFieldName())){
columnname=item.getString("utf-8");

}else if("columnValue".equals(item.getFieldName())){
columnvalue=item.getString("utf-8");

}
db.updateHouse(columnname,columnvalue , "pic",saveUrl+item.getName() );
}
写到这里,我想同学们也能明白了,第一次写,如果写的不那里不清楚,请评论该博客,我会及时回复,新手小白。