使用Servlet的文件上传需导入两个.jar包:
commons-fileupload-1.3.3.jar
commons-io-2.4.jar
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" 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>UploadAndDown</display-name>
<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>
<servlet>
<description></description>
<display-name>UploadServlet</display-name>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>org.student.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
</web-app>
//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>Insert title here</title>
</head>
<body>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
学号:<input type="text" name="sno"/><br>
姓名:<input type="text" name="sname"/><br>
上传照片: <input type="file" name="spicture"/>
<br>
<input type="submit" value="提交"/>
</form>
</body>
</html>
//servlet
package org.student.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
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;
/**
* Servlet implementation class UploadServlet
*/
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UploadServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
// 上传
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// 通过parseRequest解析form中的所有字段,并保存到items集合中
try {
if (isMultipart) {// 判断前台的form是否有multuipart/form-data字段
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
// 遍历items中的字段
Iterator<FileItem> ite = items.iterator();
while (ite.hasNext()) {
FileItem item = ite.next();
String itemName = item.getFieldName();
int sno = -1;
String name = null;
// 判断前台字段是普通form表单字段(sno sname), 还是文件字段
// request.getParameter() -- iter.getString()
if (item.isFormField()) {
if (itemName.equals("sno")) {// 根据name属性判断item是sno,sname还是spicture
sno = Integer.parseInt(item.getString("UTF-8"));
} else if (itemName.equals("sname")) {
name = item.getString("UTF-8");
} else {
System.out.println("其他字段...");
}
} else {// spicture
// 文件上传
// 文件名
String fileName = item.getName();
// 获取文件内容,并上传
// 定义文件路径:指定上传的位置(服务器路径)
// 获取服务器路径
// String path = request.getSession().getServletContext().getRealPath("upload");
String path = "D:\\workspace for j2ee\\UploadAndDown\\upload";
File file = new File(path, fileName);
item.write(file);
System.out.println("上传成功...");
return ;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}