zoukankan      html  css  js  c++  java
  • 通过Servlet设置文件下载

    文件下载

    1.获取要下载的文件的绝对路径

    但是使用getServletContext().getRealPath()方法在不同的服务器上所获得的实现是不一样的

    因为项目被打包入.war文件以后就失去了原来的目录结构,使用获取绝对路径的方法返回为NULL

    在这里我们可以使用另一个方法getResourceAsStream()获取路径

    String realPath = this.getServletContext().getRealPath("/download/1.jpg");

    InputStream inputStream = this.getServletContext().getResourceAsStream("/download/1.jpg");

    2.获取要下载的文件名

    String fileName = realPath.substring(realPath.lastIndexOf("")+);

    使用getResourceAsStream()方法时由于没有返回一个路径。所以这里的文件名需要自己赋值
    String fileName = "1.jpg";

    3.设置content-disposition响应头控制浏览器以下载文件的形式打开文件

    response.setHeader("content-disposition", "attachment;filename=" + fileName);

    4.获取要下载的文件输入流

    InputStream in = new FileInputStream(realPath);
    int len = 0;

    这里的步骤中由于realPath不再使用。所以输入流in可以不用。

    5.创建数据缓冲区

    byte[] buffer = new byte[1024];

    6.通过response对象获取OutputStream流

    OutputStream out = response.getOutputStream();

    7.将FileInputStream流写入到buffer缓冲区

    while((len = in.read(buffer)) > 0){ //这里的in换成inputStream

    8.使用OutputStream将缓冲区的数据输出到客户端浏览器

    out.write(buffer, 0, len);
    

    }

    9.关闭输入流

    in.close(); //这里同理

    测试结果

  • 相关阅读:
    git代码冲突
    Centos Git1.7.1升级到Git2.2.1
    linux指定某非root用户执行开机启动项的方法(gogs git)
    kvm增加硬盘挂载
    git分支管理策略
    mac命令行配置网络
    svn稀疏目录--通过设置工作目录的深度(depth)实现目录树的部分签出
    svn update解决冲突
    rocketmq单机搭建
    MongoDB数据库未授权访问漏洞及加固
  • 原文地址:https://www.cnblogs.com/transWang/p/6958376.html
Copyright © 2011-2022 走看看