文件上传FileUpload

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

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(); 删除临时文件

posted @ 2017-05-13 15:33  苦海无涯、苦尽甘来  阅读(314)  评论(0编辑  收藏  举报