zoukankan      html  css  js  c++  java
  • Servlet实现文件下载

    把代码复制到servlet中处理方法中:

    //1.接收用户文件名称
    String filename = req.getParameter("filename");
    //2.资源文件路径
    String realPath = this.getServletContext().getRealPath("/download/" + filename);

    //3.创建流对象
    FileInputStream read = new FileInputStream(realPath);
    ServletOutputStream out = resp.getOutputStream();

    //4.设置响应头下载类型
    String mimeType = this.getServletContext().getMimeType(filename);
    resp.setHeader("Content-Type",mimeType);
    //中文字符处理
    filename = DownLoadUtils.getFileName(req, filename);

    resp.setHeader("Content-Disposition","attachment; filename="+filename);

    //5.写入(响应)文件,
    byte[] bs = new byte[1024];
    int len = 0;

    while ((len=read.read(bs)) != -1){
    out.write(bs,0,len);
    }

    out.close();
    read.close();

    DownLoadUtils类如下:

    import javax.servlet.http.HttpServletRequest;
    import java.util.Base64;
    import java.util.Base64.Encoder;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;

    public class DownLoadUtils {

    public static 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")) {
    // 火狐浏览器
    Encoder encoder = Base64.getEncoder();
    filename = "=?utf-8?B?" + encoder.encode(filename.getBytes("utf-8")) + "?=";
    } else {
    // 其它浏览器
    filename = URLEncoder.encode(filename, "utf-8");
    }
    return filename;
    }
    }



     
  • 相关阅读:
    Kosaraju算法---强联通分量
    Java和C++的区别
    嵌入式面试题汇总
    tabbar 之 基本结构搭建
    路由 之 再识
    常见问题 之 vue项目中使用less报错
    路由 之 初识
    VueCLI3创建项目和目录结构与配置信息详解
    runtime-compiler 和 runtime-only的区别
    vueCLI2 之 目录结构
  • 原文地址:https://www.cnblogs.com/M87-A/p/12584445.html
Copyright © 2011-2022 走看看