1.首先准备需要使用的jar包
java文件上传需要用到commons-fileupload.jar和commons-io.jar
2.然后在WebContent下创建temp(缓存文件存放的地方)和upload(文件上传完毕存放的地方)两个文件夹,如图所示
3.撰写一个form表单用于上传文件,其中enctype需改成代码所示
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="FileUpLoad" method="post" enctype="multipart/form-data"><!-- 多部分表单 -->
<input type="text" name="username">
<input type="file" name="fileName">
<input type="submit" value="上传文件">
</form>
</body>
</html>
4.撰写一个servlet来处理上传文件
package com.xx.web;
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;
import org.apache.tomcat.util.http.fileupload.IOUtils;
@WebServlet("/FileUpLoad")
public class FileUpLoadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 1.创建磁盘文件项工厂
// 作用:设置缓存文件的大小,设置临时文件存储的位置
String path_temp = this.getServletContext().getRealPath("temp");
DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 1024, new File(path_temp));
// 2.创建文件上传的核心类
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件名称的编码格式
upload.setHeaderEncoding("UTF-8");
// 判断表单是否是文件上传的表单
boolean multipartContent = upload.isMultipartContent(request);
if (multipartContent) {
// 是文件上传的表单
// 解析request获得文件项集合
List<FileItem> parseRequest = upload.parseRequest(request);
if (parseRequest != null) {
for (FileItem item : parseRequest) {
// 判断是不是一个普通表单项
boolean formField = item.isFormField();
if (formField) {
String fieldName = item.getFieldName();
String fieldValue = item.getString("UTF-8");// 对普通表单的内容进行编码
System.out.println(fieldName + ":" + fieldValue);
} else {
String fileName = item.getName();// 获得文件名
InputStream in = item.getInputStream();// 获得上传文件的内容
String path_store = this.getServletContext().getRealPath("upload");//获得项目路径
OutputStream out = new FileOutputStream(path_store + "/" + fileName);
IOUtils.copy(in, out);//调用io.jar里面的工具类
in.close();
out.close();
// 删除临时文件
item.delete();
}
}
}
} else {
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
5.这样在eclipse目录下是看不到上传之后的文件的,因为文件是上传到了服务器,所以可以在tomcat中找到上传之后的文件