文件上傳
實現文件上傳功能,需要
- 在Web頁面上添加輸入項
- <input type="file" name="xxx" />
- form開始標籤中的屬性method必須爲post方式
- form標籤中的enctype屬性設爲multipart/form-data
- 在servlet中讀取上傳文件的數據,並保存到服務器上。
- 使用@MultiPartConfig註解
- 從request對象對象中獲取輸入流
- 保存至服務器的路徑
實現代碼
upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上傳頁面</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<table>
<tr>
<td></td>
<td><h1>文件上傳</h1></td>
</tr>
<tr>
<td>文件描述:</td>
<td><input type="text" name="desc" /></td>
</tr>
<tr>
<td>上傳文件:</td>
<td><input type="file" name="file" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="上傳文件" /></td>
</tr>
</table>
</form>
</body>
</html>
UploadServlet
package cn.sdut.servlet;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
* 上傳文件必須添加@MultipartConfig
*/
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
request.setCharacterEncoding("UTF-8");
String desc = request.getParameter("desc");
//獲取文件
Part part = request.getPart("file");
String name = part.getHeader("Content-disposition");
System.out.println(name+"||"+desc);
//獲取上傳文件路徑
String path = request.getServletContext().getRealPath("/upload");
System.out.println(path);
//獲取文件名後綴
String separator = name.substring(name.lastIndexOf("."),name.length()-1);
//重命名文件名,UUID爲windows的通用唯一識別碼
String filename = path+"\\"+UUID.randomUUID().toString()+separator;
System.out.println(filename);
//上傳文件
part.write(filename);
response.setContentType("text/html;charset=utf-8");
response.getWriter().append("上傳成功");
} catch (Exception e) {
response.setContentType("text/html;charset=utf-8");
response.getWriter().append("上傳失敗");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
文件下載
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>下載頁面</title>
</head>
<body>
<div>
<h2>下載文件</h2>
<c:forEach items="${files }" var="name">
<a href="${name }">${name }</a><br/>
</c:forEach>
</div>
</body>
</html>
DownloadServlet
package cn.sdut.servlet;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
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 javax.servlet.http.HttpSession;
@WebServlet("/download")
public class Download extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
List<String> list = (List<String>) session.getAttribute("files");
//如果集合爲空,創建一個新集合
if(list==null) {
list = new ArrayList<String>();
}
String path = request.getServletContext().getRealPath("/upload/");
File file=new File(path);
System.out.println(path);
//獲取文件列表
File[] files=file.listFiles();
for (File file2:files) {
//存入集合中
System.out.println(file2.getName());
list.add(file2.getName());
}
session.setAttribute("files", list);
request.getRequestDispatcher("/download.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}