1、在做之前需要导入的jar包组件:
commons-fileupload-1.2.1.jar、commons-io-2.0.jar(依赖包)
2、页面代码html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="simpleFileupload" method="post" enctype="multipart/form-data">
最简单的文件上传:<input type="file" name="fileupload"/>
描述:<input type="text" name="desc"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
注意:这里的enctype(编码类型)是“multipart/form-data”3、servlet代码
- package com.xiaojie.simpleFileupload;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.List;
- import javax.servlet.ServletException;
- 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.FileUploadException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- /**
- * Servlet implementation class SimpleFileupload
- */
- @WebServlet("/simpleFileupload")
- public class SimpleFileupload extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- request.setCharacterEncoding("utf-8");
- response.setCharacterEncoding("utf-8");
- //1、创建一个DiskFileItemFactory工厂
- DiskFileItemFactory factory = new DiskFileItemFactory();
- //2、创建一个文件上传解析器
- ServletFileUpload upload = new ServletFileUpload(factory);
- //解决上传文件名的中文乱码
- upload.setHeaderEncoding("UTF-8");
- factory.setSizeThreshold(1024 * 500);//设置内存的临界值为500K
- File linshi = new File("E:\linshi");//当超过500K的时候,存到一个临时文件夹中
- factory.setRepository(linshi);
- upload.setSizeMax(1024 * 1024 * 5);//设置上传的文件总的大小不能超过5M
- try {
- // 1. 得到 FileItem 的集合 items
- List<FileItem> /* FileItem */items = upload.parseRequest(request);
- // 2. 遍历 items:
- for (FileItem item : items) {
- // 若是一个一般的表单域, 打印信息
- if (item.isFormField()) {
- String name = item.getFieldName();
- String value = item.getString("utf-8");
- System.out.println(name + ": " + value);
- }
- // 若是文件域则把文件保存到 e:\files 目录下.
- else {
- String fileName = item.getName();
- long sizeInBytes = item.getSize();
- System.out.println(fileName);
- System.out.println(sizeInBytes);
- InputStream in = item.getInputStream();
- byte[] buffer = new byte[1024];
- int len = 0;
- fileName = "e:\files\" + fileName;//文件最终上传的位置
- System.out.println(fileName);
- OutputStream out = new FileOutputStream(fileName);
- while ((len = in.read(buffer)) != -1) {
- out.write(buffer, 0, len);
- }
- out.close();
- in.close();
- }
- }
- } catch (FileUploadException e) {
- e.printStackTrace();
- }
- }
- }