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(); //这里同理

    测试结果

  • 相关阅读:
    WEB前端第十九课——雪碧图&滑动门
    近期网上资源收集(一)
    飞利浦 PHILIPS 电动牙刷HX6730 拆解
    webvtt字幕转srt字幕的python程序(附改名程序)
    [转载]Core Elements of a Program
    反正也没人看
    open read split
    蛋疼的二分法死循环
    leetcode ex3 找出穿过最多点的直线 Max Points on a Line
    leetcode AC1 感受
  • 原文地址:https://www.cnblogs.com/transWang/p/6958376.html
Copyright © 2011-2022 走看看