java web如何實現文件下載功能?


一、超鏈接下載:

這種方式非常簡單,就是在超鏈接里面寫上即將下載的文件路徑,我這里將文件放在webapp下面的download文件夾里面:

 

 

<a href="download/notice1.pdf"></a>

但是有一個弊端就是,如果下載的文件可以直接被瀏覽器識別就會自動打開,比如.png,.pdf文件,如果是.zip等文件,則不會打開。

二、Servlet下載:

為了解決第一種方式的弊端,我們采取Servlet下載方式。

1.新建Servlet文件,可以命名為DownloadServlet,映射url是“/downloadServlet”,我的項目名稱是suiningAdmissions;

2.在DownloadServlet中加入以下內容,其中filename是你在下載的時候需要傳遞的參數,是你即將下載的文件的名稱;

package cn.itIcey.suining.web.servlet;

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 java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲得請求文件名
        String filename = request.getParameter("filename");
        System.out.println(filename);

        //設置文件MIME類型
        response.setContentType(getServletContext().getMimeType(filename));
        //設置Content-Disposition
        response.setHeader("Content-Disposition", "attachment;filename="+filename);
        //讀取目標文件,通過response將目標文件寫到客戶端
        //獲取目標文件的絕對路徑
        String fullFileName = getServletContext().getRealPath("/download/" + filename);
        //System.out.println(fullFileName);
        //讀取文件
        InputStream in = new FileInputStream(fullFileName);
        OutputStream out = response.getOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        //循環取出流中的數據
        while((len = in.read(buffer)) != -1){
            out.write(buffer,0,len);
        }

        in.close();
        out.close();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

3.將下載鏈接重新設置,其中/suiningAdmission/downloadServlet是我創建的Servlet的映射路徑,注意一定要把前面的項目名稱加上去!filename后面的內容就是下載的文件名稱。

<a href="/suiningAdmissions/downloadServlet?filename=notice3.pdf"

4.於是就可以下載啦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM