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



     
  • 相关阅读:
    数据的独立同分布检验
    基于密度聚类的DBSCAN和kmeans算法比较
    Python 爬虫笔记、多线程、xml解析、基础笔记(不定时更新)
    多进程之multiprocessing模块、守护进程、互斥锁
    程序与进程的区别,并发与并行的区别,多进程的实现原理
    并发编程之守护进程
    MySQL帮助文档的使用
    MySQL操作之DCL
    MySQL操作之DML
    MySQL操作之DDL
  • 原文地址:https://www.cnblogs.com/M87-A/p/12584445.html
Copyright © 2011-2022 走看看