zoukankan      html  css  js  c++  java
  • Java 文件下载功能 解决中文乱码

    Html部分

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <a href="http://localhost:8080/webdemojava/download1?filename=a.flv" class="downloadbtn">a.flv</a>
        <a href="http://localhost:8080/webdemojava/download1?filename=a.jpg" class="downloadbtn">a.jpg</a>
        <a href="http://localhost:8080/webdemojava/download1?filename=a.mp3" class="downloadbtn">a.mp3</a>
        <a href="http://localhost:8080/webdemojava/download1?filename=a.mp4" class="downloadbtn">a.mp4</a>
        <a href="http://localhost:8080/webdemojava/download1?filename=a.txt" class="downloadbtn">a.txt</a>
        <a href="http://localhost:8080/webdemojava/download1?filename=a.z1ip" class="downloadbtn">a.z1ip</a>
    </body>
    
    </html>

    Java代码

    package action;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.jasper.tagplugins.jstl.core.Out;
    
    import sun.misc.BASE64Encoder;
    
    
    public class DownLoad1 extends HttpServlet {
        private static final long serialVersionUID = 1L;
       
        public DownLoad1() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            
            
            String filename = request.getParameter("filename"); //获取发送过来的文件名
            filename = new String(filename.getBytes("ISO8859-1"),"UTF-8"); //解决传过来的文件名是中文.会变乱码的问题
            
            //获得请求头中的 User-Agent
            String agent = request.getHeader("User-Agent");
            //根据不同的客户的 进行不同的编码 .解决下载的文件 中文 没名字
            String filenameEncoder = "";
            if (agent.contains("MSIE")) {
                // IE浏览器
                filenameEncoder = URLEncoder.encode(filename, "utf-8");
                filenameEncoder = filenameEncoder.replace("+", " ");
            } else if (agent.contains("Firefox")) {
                // 火狐浏览器
                BASE64Encoder base64Encoder = new BASE64Encoder();
                filenameEncoder = "=?utf-8?B?"
                        + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
            } else {
                // 其它浏览器
                filenameEncoder = URLEncoder.encode(filename, "utf-8");                
            }
            
            
            String realPath = this.getServletContext().getRealPath("/download/"+filename); //相对路径变绝对路径
            InputStream in = null;
            try {
                in = new FileInputStream(realPath); //读到要下载的文件.并做检测文件是否存在
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            if (in == null) {
                response.setContentType("text/html;charset=UTF-8");
                response.getWriter().append("没有找到该文件");
                return;
            }
            
            ServletOutputStream out = response.getOutputStream();
            response.setContentType(this.getServletContext().getMimeType(filename)); //设置返回的文件类型
            response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //告诉客户的文件以附件类型打开(下载)
    
            int len = 0;
            byte[] buffer = new byte[1024];
            while ((len=in.read(buffer))>0) {
                out.write(buffer, 0, len);
            }
            in.close();
            out.close();
            
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
  • 相关阅读:
    Atitit 人脸识别 眼睛形态 attilax总结
    Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
    atitit 板块分类 上市公司 龙头企业公司 列表 attilax总结.docx
    Atititi atiitt eam pam资产管理 购物表去年.xlsx
    使用cmd查看电脑连接过的wifi密码(一)
    常见十大web攻击手段 悟寰轩
    常见web攻击方式 悟寰轩
    【MYSQL数据库】MYSQL学习笔记mysql分区基本操作 悟寰轩
    Filter及FilterChain的使用详解 悟寰轩
    启动tomcat spring初始化两次问题(eg:@PostConstruct) 悟寰轩
  • 原文地址:https://www.cnblogs.com/wwcherish/p/8182895.html
Copyright © 2011-2022 走看看