文件下载(一个头两个流)

页面
<!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();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章