Detailed ServletFileUpload API

ServletFileUpload
	1.ServletFileUpload upload=new ServletFileUpload(factory);
	 创建一个上传工具,指定使用缓存区与临时文件存储位置.
	
	2.List<FileItem> items=upload.parseRequest(request);
		它是用于解析request对象,得到所有上传项.每一个FileItem就相当于一个上传项.
		
	3.boolean flag=upload.isMultipartContent(request);
		用于判断是否是上传.
		可以简单理解,就是判断encType="multipart/form-data";
		
	4.设置上传文件大小
		void setFileSizeMax(long fileSizeMax) 设置单个文件上传大小 
		void  setSizeMax(long sizeMax) 设置总文件上传大小 

	5.解决上传文件中文名称乱码
		setHeaderEncoding("utf-8");
		注意:如果使用reqeust.setCharacterEncoding("utf-8")也可以,但不建议使用。

ServletFileUpload file upload core classes

static boolean isMultipartContent (javax.servlet.http.HttpServletRequest request) determines whether the request encoding multipart / form-data

 

java.util.List parseRequest (javax.servlet.http.HttpServletRequest request) parse request, each part of the package object volume FileItem request, returns List <FileItem>

 

void setFileSizeMax (long fileSizeMax) disposed single file upload size

 void setSizeMax (long sizeMax) set the total size of the file upload

 

void setHeaderEncoding (java.lang.String encoding) Set code set to resolve to upload the file name garbled *****

package cn.learn.web.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;

//commons-fileupload api详解
@SuppressWarnings("all")
public class Upload3Servlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");

		// 1.创建 DiskFileItemFactory
		// DiskFileItemFactory factory = new DiskFileItemFactory(); //使用默认的.
		File file = new File(this.getServletContext().getRealPath("/temp"));// 获取temp目录部署到tomcat后的绝对磁盘路径
		DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 100, file); // 使用默认的.

		// 2.创建ServletFileUpload
		ServletFileUpload upload = new ServletFileUpload(factory);
		boolean flag = upload.isMultipartContent(request); // 用于判断是否是上传操作.
		if (flag) {
			// 解决上传文件名称中文乱码
			upload.setHeaderEncoding("utf-8");

			// 设置上传文件大小
			//upload.setSizeMax(1024 * 1024 * 10);// 总大小为10m

			try {
				List<FileItem> items = upload.parseRequest(request);// 解决request,得到所有的上传项FileItem

				// 3.得到所有上传项
				for (FileItem item : items) {
					if (item.isFormField()) {
						// 非上传组件
						System.out.println("组件名称:" + item.getFieldName());
						System.out.println("内容:" + item.getString("utf-8")); // 解决乱码问题
					} else {
						// 上传组件
						System.out.println("组件名称:" + item.getFieldName());
						System.out.println("上传文件名称:" + item.getName());

						String name = item.getName(); // 上传文件名称
						System.out.println(name);
						name = name.substring(name.lastIndexOf("\\") + 1);

						IOUtils.copy(item.getInputStream(),
								new FileOutputStream("d:/upload/" + name));

						// 删除临时文件
						item.delete();
					}
				}

			} catch (FileUploadException e) {
				// e.printStackTrace();
				response.getWriter().write(e.getMessage());
				return;
			}
		} else {
			response.getWriter().write("不是上传操作");
			return;
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

 

 

 

 

 

 

 

 

 

Released 2417 original articles · won praise 62 · Views 200,000 +

Guess you like

Origin blog.csdn.net/Leon_Jinhai_Sun/article/details/105155465