Servlet实现上传文件
用到的jar包:commons-fileupload-1.2.2.jar和commons-io-2.4.jar两个包。
前台index.jsp页面:
<%@ 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>Servlet实现上传文件</title>
</head>
<body>
<form action="uploadservlet" method="post" enctype="MULTIPART/FORM-DATA" >
<input type="file" name="file1" size="30"/>
<input type="submit" name="sc" value="上传">
</form>
</body>
</html>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>upload</display-name>
<!-- 上传 -->
<servlet>
<servlet-name>UpLoadServlet</servlet-name>
<servlet-class>com.servlet.UpLoadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpLoadServlet</servlet-name>
<url-pattern>/uploadservlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
后台UpLoadServlet.java
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UpLoadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 1.
fileUpload(req);
// 2.
// 3.
}
// 上传文件
private void fileUpload(HttpServletRequest req) {
try {
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M
diskFactory.setSizeThreshold(4 * 1024);
// repository 贮藏室,即临时文件目录
File tempFolder = new File(this.getServletContext()
.getRealPath("/") + "/tempfolder");
// 如果临时文件目录不存在,就创建一个临时文件目录
if (!tempFolder.exists() && !tempFolder.isDirectory()) {
tempFolder.mkdir();
}
diskFactory.setRepository(tempFolder);
ServletFileUpload upload = new ServletFileUpload(diskFactory);
// 设置允许上传的最大文件大小 4M
upload.setSizeMax(4 * 1024 * 1024);
// 解析HTTP请求消息头
List fileItems = upload.parseRequest(req);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
// 处理上传的文件
String ksxxfilepath = processUploadFile(item);
System.out.println(ksxxfilepath);
} else {
// 处理表单内容
processFormField(item);
}
}
} catch (Exception e) {
// 使用 fileupload 包时发生异常
e.printStackTrace();
}
}
// 处理表单内容
private void processFormField(FileItem item) throws Exception {
String name = item.getFieldName();
String value = item.getString();
System.out.println(name+value);
}
// 处理上传的文件
private String processUploadFile(FileItem item) throws Exception {
// 此时的文件名包含了完整的路径,得注意加工一下
String filename = item.getName();
int index = filename.lastIndexOf("\\");
//截取到文件名
filename = filename.substring(index + 1, filename.length());
long fileSize = item.getSize();
if ("".equals(filename) && fileSize == 0) {
return "";
}
File tempfiles = new File(this.getServletContext().getRealPath("/")
+ "/tempfiles");
if (!tempfiles.exists() && !tempfiles.isDirectory()) {
tempfiles.createNewFile();
}
File uploadFile = new File(this.getServletContext().getRealPath("/")
+ "/tempfiles" + "/" + filename);
item.write(uploadFile);
// 文件保存完毕
return uploadFile.getPath();
}
}