文件下載(一個頭兩個流)

頁面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
        <a href="/downloadServlet01?filename=1.jpg">1.jpg</a><br/>
        <a href="/downloadServlet01?filename=2.txt">2.txt</a><br/>
        <a href="/downloadServlet01?filename=3.zip">3.zip</a><br/>
        <a href="/downloadServlet01?filename=劉亦菲.jpg">劉亦菲.jpg</a><br/>
</body>
</html>

 


package com.itheima.sh.web;

import java.net.URLEncoder;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/downloadServlet01")
public class DownloadServlet01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解決亂碼.請求亂碼和相應亂碼
         request.setCharacterEncoding("utf-8");
         response.setContentType("text/html;charset=utf-8");
         //獲取文件
        String filename = request.getParameter("filename");
        //定義一個全局域
        ServletContext servletContext = getServletContext();
        //獲取絕對路徑(注該路徑在WEB-INF下面)
        String realPath = servletContext.getRealPath("WEB-INF//"+filename);
        //獲取路徑的文件
        String mimeType = servletContext.getMimeType(filename);
        //定義一個file
        File file = new File(realPath);
        //如果文件存在的話
        if(file.exists()){
              //如果存在的話,就獲取兩個頭和兩個流
              //兩個頭已經存在
              String encodeName = URLEncoder.encode(filename, "utf-8");
              // response.setHeader("content-disposition", "attachment;filename=" + name);
              //attechment文件是下載,不寫的話就是瀏覽器打開.
              response.setHeader("content-disposition", "attachment;filename=" + encodeName);
              //獲取文件類型
              response.setContentType(mimeType);
              //創建字節輸入流對象關聯服務器的文件
              FileInputStream fis = new FileInputStream(file);
              //創建輸入流向瀏覽器中寫出數據
              ServletOutputStream os = response.getOutputStream();
              //拷貝數據
              byte[] buf = new byte[1024];
              int len = 0;
              while((len=fis.read(buf))!=-1){
                  os.write(buf,0,len);
              }
              //釋放資源
              os.close();
              fis.close();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章