response-综合案例-文件的下载

response-综合案例-文件的下载

Servlet代码如下:

package com.lbl.servlet;

import com.lbl.servlet.service.FileService;
import sun.misc.BASE64Encoder;

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

@WebServlet("/downloadServlet2")
public class DownloadServlet2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取请求参数中的文件名
        String filename = request.getParameter("filename");
        String saveName = getFileName(request, filename);

        //自动根据文件的后缀名,获取mime-type类型  .jpg  image/jpeg
        String mimeType = getServletContext().getMimeType(filename);
        System.out.println(mimeType);
        //指令,调用浏览器弹出下载框,由用户自己保存
        response.setHeader("Content-Type",mimeType);
        response.setHeader("Content-Disposition", "attachment;filename="+saveName);

        //加载a.jpg文件成为一个输入流
        InputStream inputStream = getServletContext().getResourceAsStream("download/" + filename);
        //再使用字节流,将数据写到浏览器
        OutputStream outputStream = response.getOutputStream();
        //浏览器自动将数据显示成图片
        FileService fileService = new FileService();
        fileService.copy(inputStream,outputStream);
        //关闭资源
        outputStream.close();
        inputStream.close();
    }
    public  String getFileName(HttpServletRequest request,String filename) throws UnsupportedEncodingException {
    
    
        String agent = request.getHeader("User-Agent");
        if (agent.contains("MSIE")) {
    
    
            // IE浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        } else if (agent.contains("Firefox")) {
    
    
            // 火狐浏览器
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
    
    
            // 其它浏览器
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}

FileService代码如下:

package com.lbl.servlet.service;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

//文件业务类
public class FileService {
    
    
    //复制文件
    public void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
    
    
        //边读边写
        //1:字节数组 缓冲区
        byte[] buffer=new byte[1024];
        int len = 0;
        //2:边读边写
        while ((len=inputStream.read(buffer))!=-1){
    
    
            outputStream.write(buffer,0,len);
        }
    }
}

前端index.jsp代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <a href="/Day03_war_exploded2/downloadServlet2?filename=a.jpg">点一点看图片</a><br/>
  <a href="/Day03_war_exploded2/downloadServlet2?filename=a.mp3">点一点看mp3</a><br/>
  <a href="/Day03_war_exploded2/downloadServlet2?filename=a.mp4">点一点看mp4</a><br/>
  <a href="/Day03_war_exploded2/downloadServlet2?filename=a.zip">点一点看zip</a><br/>
  </body>
</html>

效果如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37924905/article/details/108501784
今日推荐