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;
    }
    }



     
  • 相关阅读:
    python连接字符串的几种方法--转子(香草拿铁的园子)
    winform属性
    C# Timer
    SQL基础
    SQL 基础
    File类 ReadAllBytes() ReadAllLines() ReadAllText()
    学习C#20天有感
    装箱和拆箱
    机器学习基础:朴素贝叶斯小结
    分类问题样本不均衡问题
  • 原文地址:https://www.cnblogs.com/M87-A/p/12584445.html
Copyright © 2011-2022 走看看