当使用表单中需要上传文件时,即存在type="file" 的Input标签,那么表单就不能使用传统的request方式提交,需要借助第三方工具。比如在tomcat服务器中提供了一种fileUpload组件。在工程中引入相关的jar包:commons-fileupload-1.2.1.jar和commons-io-1.4.jar即可调用。
这里要注意三点:
1:表单必须是post的方式来提交
2:表单的文件上传项(type="file"的input控件),必须设置name属性和值。
3:表单必须设置enctype属性值为:multipart/form-data。
例:regist.jsp表单提交数据到Regist.java这个Servlet进行处理。
regist的表单要写成如下格式:
<form action="Regist" method="post" enctype="multipart/form-data">...<input type="file" name="upload">...</form>
在相应的处理页,此处为Regist.java这个Servlet,需要进行如下工作:
1:创建一个磁盘文件项工厂对象,它是FileUpload组件中的一个对象。
DiskFileItemFactory dff = new DiskFileItemFactory();
2:创建一个核心解析类,用来处理从客户端发送来的请求
ServletFileUpload sfu = new ServletFileUpload(dff);
3:解析request请求。每一个表单控件生成一个FileItem对象,返回FileItem对象的List集合
List<FileItem> list = sfu.parseReauest(request); //当然此处的request为传到方法中的参数。
4:遍历集合,获得每个FileItem,判断是表单项还是文件上传项,进行对应的操作。
for( FileItem fi : list ){
if( fi.isFormField() ){
String name = fi.getFileName(); // 获取表单项的name属性值
String value = fi.getString("UTF-8"); //获取表单项的值,按utf-8进行编码解码。
}else{...}
}