JavaServlet實現下載功能


    我們在項目中經常會用到下載功能,所以今天我們先說下下載功能實現的思路,然后通過一個案例代碼來具體體現。

1.下載的思路:

①首先要獲取我們要操作的文件對象的路徑

②然后使用獲取的文件對象路徑構建一個文件操作流對象

③設置好相關的http響應的頭,告訴瀏覽器怎么來操作我們寫回的數據,是下載、打開等等。

④通過response獲取字節流,並結合我們的文件流進行讀取和寫出操作

⑤關閉相關的流資源

2.下載具體servlet實現代碼:

 

package com.servlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/download.do")
public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * 使用servlet實現文件下載功能
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String fileName = "關系圖.jpg";
        OutputStream out = null;
        FileInputStream fis = null;
        // 1.獲取資源文件的路徑,當文件名是中文的時候出現不正常的情況,所以需要進行url編碼
        String path = this.getServletContext().getRealPath("/WEB-INF/classes/com/servlet/" + URLEncoder.encode(fileName, "UTF-8"));
        try {
            // 2.根據獲取到的路徑,構建文件流對象
            fis = new FileInputStream(path);
            out = response.getOutputStream();
            // 3.設置讓瀏覽器不進行緩存,不然會發現下載功能在opera和firefox里面好好的沒問題,在IE下面就是不行,就是找不到文件
            response.setHeader("Pragma", "No-cache");
            response.setHeader("Cache-Control", "No-cache");
            response.setDateHeader("Expires", -1);
            // 4.設置Content-type字段
            response.setContentType("image/jpeg");
            // 5.設置http響應頭,告訴瀏覽器以下載的方式處理我們的響應信息
            response.setHeader("content-disposition", "attachment;filename=" + fileName);
            // 6.開始寫文件
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = fis.read(buf)) != -1) {
                out.write(buf, 0, len);
            }
        } finally {
            if (fis != null) {
                fis.close();
            }

        }

    }

}

 

至此一個簡單的servlet實現下載功能已經實現完畢,有不足的地方,希望大家多多提意見!


免責聲明!

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



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