zoukankan      html  css  js  c++  java
  • 带中文名称的文件下载

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>下载页面</title>
    </head>
    <body>
    <a href="/day15/img/九尾.jpg">图片1</a>
    <a href="/day15/img/1.avi">视屏</a>
    <hr/>
    <a href="/day15/downloadServlet?filename=九尾.jpg">图片1</a>
    <a href="/day15/downloadServlet?filename=1.avi">视屏</a>

    </body>
    </html>

    package com.hopetesting.web.utils;

    import sun.misc.BASE64Encoder;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;


    public class DownLoadUtils {

    public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
    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;
    }
    }



    package com.hopetesting.web.download;

    import com.hopetesting.web.utils.DownLoadUtils;
    import sun.management.Agent;

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

    /**
    * @author newcityman
    * @date 2019/9/2 - 0:05
    */
    @WebServlet("/downloadServlet")
    public class DownloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 1、 获取请求参数,文件名称
    String filename = request.getParameter("filename");
    // 2、 使用字节输入流加载文件进内存
    // 2.1、找到文件路径
    ServletContext context = request.getServletContext();
    String realPath = context.getRealPath("/img/" + filename);
    // 2.2、用字节流关联
    FileInputStream fis = new FileInputStream(realPath);
    // 3、设置response的响应头
    // 3.1信息content-type
    String mimeType = context.getMimeType(filename);
    response.setHeader("content-type",mimeType);
    // 3.2设置响应头信息content-disposition
    //处理中文文件名乱码问题
    // 获取user-agent请求头
    String agent = request.getHeader("user-agent");
    // 使用工具类方法编码文件名即可
    filename= DownLoadUtils.getFileName(agent, filename);
    response.setHeader("content-disposition","attachment;filename="+filename);
    // 4、将输入流的数据写出到输出流中
    ServletOutputStream sos = response.getOutputStream();
    int len=0;
    byte[] buff = new byte[1024*8];
    while( (len=fis.read(buff))!=-1){
    sos.write(buff,0,len);
    }
    fis.close();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request, response);
    }
    }
     
  • 相关阅读:
    8种CSS清除浮动的方法优缺点分析
    link和@import的区别
    删除表及删除表中数据的方法
    【HTML5】---【HTML5提供的一些新的标签用法以及和HTML 4的区别】
    【HTML】---HTML语义化
    【HTML5】页面点击按钮添加一行 删除一行 全选 反选 全不选
    第四篇:python 高级之面向对象初级
    第三篇:python高级之生成器&迭代器
    第二篇:python高级之装饰器
    第一篇:python高级之函数
  • 原文地址:https://www.cnblogs.com/newcityboy/p/11444417.html
Copyright © 2011-2022 走看看