【上传】
upload.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="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <input type="text" name="username"><br> <input type="file" name="userfile"><br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form> </body> </html>
UploadServlet.java
package zh.fileupload.demo; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.UUID; 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; public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 解决post方式提交中文乱码问题 request.setCharacterEncoding("utf-8"); // 解决响应编码问题 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 设置文件大小临界值,大于临界值就使用临时缓存目录 String tempPath = this.getServletContext().getRealPath("/temp"); DiskFileItemFactory fileFactory = new DiskFileItemFactory(10, new File(tempPath)); ServletFileUpload fileUpload = new ServletFileUpload(fileFactory); //fileUpload.setSizeMax(long sizeMax);//设置允许上传的所有文件总大小,字节 //fileUpload.setFileSizeMax(long fileSizeMax);// 设置单个上传文件大小,字节 List<FileItem> fileItemList = null; try { // 解析表单上传数据 fileItemList = fileUpload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } if (fileItemList != null) { for (FileItem fileItem : fileItemList) { if (fileItem.isFormField()) { // 普通表单字段 String fieldName = fileItem.getFieldName();// 字段名称,name属性值 String fieldValue = fileItem.getString();// 字段内容,用户填的内容 out.print(fieldName + "=" + fieldValue); out.write("<br>"); } else { // 文件表单字段 String savePath = this.getServletContext().getRealPath("/upload"); try { // 不同浏览器得到的文件名不一样,D:\a.txt 或 a.txt String fileName = fileItem.getName();// 文件名 fileName = fileName.substring(fileName.indexOf("\\")+1);// a.txt // 解决保存文件重名问题 fileItem.write(new File(savePath,UUID.randomUUID().toString()+"_"+fileName)); out.write(fileName + " 文件上传成功"); } catch (Exception e) { e.printStackTrace(); } } } } } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>zh.fileupload.demo.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping> </web-app>
访问:http://localhost:8080/JavaWeb2/upload.jsp
【下载】
download.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>文件下载</title> </head> <body> <a href="${pageContext.request.contextPath}/DownloadServlet">文件下载</a> </body> </html>
DownloadServlet.java
package zh.fileupload.demo; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); // 下载文件路径 String filepath = this.getServletContext().getRealPath("/upload/小小的太阳.txt"); File file= new File(filepath); // 设置两个响应头,使用URLEncoder解决下载文件名乱码问题 response.addHeader("Content-Type", "application/octet-stream"); response.addHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(file.getName(), "utf-8")); IOUtils.copy(new FileInputStream(file), response.getOutputStream()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>DownloadServlet</servlet-name> <servlet-class>zh.fileupload.demo.DownloadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DownloadServlet</servlet-name> <url-pattern>/DownloadServlet</url-pattern> </servlet-mapping> </web-app>
访问:http://localhost:8080/JavaWeb2/download.jsp