Servlet处理Form表单提交的文件数据以及普通数据
其中需要用到的两个包:
commons-fileupload-1.2.1.jar.的下载地址和 commons-io.jar的下载地址
处理表单提交数据相关代码
// An highlighted block
/**处理表单域,返回一个表单名字为key,表单类容或文件名为value的Map对象*/
public Map<String, String> uploadPackage(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map<String, String> params = new HashMap<String, String>();
try
{
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
// 得到所有的表单域,它们目前都被当作FileItem
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
// 利用迭代器遍历集合
while (iter.hasNext())
{
FileItem item = iter.next();
// 获取上传的文件名
String fileName = item.getName();
if (item.isFormField()){
// 如果是普通的表单域
// 处理普通表单内容
String name = item.getFieldName();
String value = new String(item.getString().getBytes("ISO-8859-1"), "utf-8");
params.put(name, value);
} else if(fileName != null && !"".equals(fileName)){
///如果是文件
System.out.println("开始上传文件111:"+fileName);
//随机生成一个文件名
String picName = UUID.randomUUID().toString();
//获取项目运行时的绝对路径(request.getServletContext().getRealPath("/"))
String realPath = request.getServletContext().getRealPath("/");
//得到文件后缀名
String suffix = fileName.substring(fileName.lastIndexOf("."));
//拼接文件存放路径
String filePath = realPath+"image\\postGoods\\"+picName+suffix;
item.write(new File(filePath));
//将随机生成的图片路径存入map中。
System.out.println("文件上传成功,文件路径为:"+filePath);
params.put("filePath", filePath);
}else{// 修改操作时,如果没有上传文件
params.put("filePath", "noFile");
}
}
}catch (Exception e){
System.out.println("文件上传出错");
System.out.println(e.getMessage());
e.printStackTrace();
}
return params;
}
解析Map
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String goodsName,goodsType,oldPrice,newPrice,goodsCondition,invoice,filePath,detailedRemake;
//提取表单数据
Map<String, String> dataMap = uploadPackage(request,response);
for(String key:dataMap.keySet()){
System.out.println("键:"+key+"\t值:"+dataMap.get(key));
}
}
用到的工具类
package com.Servlet;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;