準(zhǔn)備工作
1、確保服務(wù)器端已經(jīng)安裝了Java環(huán)境,并且配置好了Tomcat服務(wù)器。
2、在服務(wù)器端創(chuàng)建一個文件夾,用于存放需要下載的文件。
3、將需要下載的文件放入剛剛創(chuàng)建的文件夾中。
4、編寫一個簡單的JSP頁面,用于實現(xiàn)文件下載功能。
編寫JSP頁面
1、打開一個文本編輯器,如Notepad++或者Sublime Text。
2、新建一個JSP文件,download.jsp。
3、編寫JSP頁面的代碼,如下所示:
<%@ page language="java" contentType="text/html; charset=UTF8" pageEncoding="UTF8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF8"> <title>文件下載</title> </head> <body> <h1>文件下載</h1> <form action="downloadServlet" method="post" enctype="multipart/formdata"> <label for="fileName">選擇文件:</label> <input type="text" id="fileName" name="fileName" readonly="readonly"> <br><br> <input type="submit" value="下載"> </form> </body> </html>
編寫Servlet處理文件下載請求
1、在服務(wù)器端的WebContent目錄下,新建一個Java類,DownloadServlet.java。
2、編寫Servlet類的代碼,如下所示:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.*; import org.apache.commons.fileupload.servlet.*; import org.apache.commons.io.*; public class DownloadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF8"); response.setContentType("text/html;charset=UTF8"); String filePath = "D:/files"; // 服務(wù)器端文件存放路徑 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { // 判斷是否為文件上傳項 String fileName = item.getName(); // 獲取文件名 File file = new File(filePath + "/" + fileName); // 創(chuàng)建文件對象 item.write(file); // 保存文件到服務(wù)器端指定路徑 response.setHeader("ContentDisposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF8")); // 設(shè)置響應(yīng)頭,實現(xiàn)文件下載功能 response.getOutputStream().write(FileUtils.readFileToByteArray(file)); // 讀取文件內(nèi)容并寫入響應(yīng)輸出流,實現(xiàn)文件下載功能 break; // 只處理第一個文件上傳項,避免重復(fù)下載多個文件 } } } catch (Exception e) { e.printStackTrace(); } finally { if (upload != null) { // 關(guān)閉文件上傳解析器,釋放資源 upload.cleanFiles(); } } } }