
从上面可以看出,如果我们想上传文件,需要对表单提交过来的内容进行解析,每一个文件项.
java 核心代码

jar 包

文件上传代码
package cn.ecit.servlet;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//初始化文件工厂
FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload up = new ServletFileUpload(fileItemFactory);
up.setFileSizeMax(50*1024*1024);
up.setSizeMax(10*1024*1024);
up.setHeaderEncoding("UTF-8");
if(up.isMultipartContent(req)){
try {
List<FileItem> list = up.parseRequest(req);
for(FileItem item:list){
if(item.isFormField()){
String fieldName = item.getFieldName();
String fieldValue = item.getString("UTF-8");
System.out.println(fieldName+" "+fieldValue);
}else{
String fileName = item.getName();
String path = getServletContext().getRealPath("/upload");
File file = new File(path,fileName);
item.write(file);
item.delete();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}
文件上传总结:
1.创建文件临时工厂
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload up = new ServletFileUpload(factory);
2.配置工厂参数
up.setFileSizeMax(30*1024*1024);
up.setSizeMax(80*1024*1024);
up.setHeaderEncoding("UTF-8");
3.判断是否为文件上传(由前台提交表单属性决定)
up.isMultipartContent(req)
4.得到 FileItem (可以是多文件上传)
List<FileItem> list = up.parseRequest(req);
一个list 代表一个文件项目,如上图所示
5.遍历文件项
for(FileItem item:list)
6.判断 item.isFormField() 是否为普通文本框
7. 得到文件上传路径 getServletContext().getRealPath("/upload");
8.写入文件 item.write(file);
9.item.delete(); 删除临时文件