JavaWeb——上傳和下載(servlet3.0)

文件上傳

實現文件上傳功能,需要

  • 在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);
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章