zoukankan      html  css  js  c++  java
  • 使用response下载文件

    前言:

    经常在网上点开一个链接,就可以让你下载一个文件,比如jar,jdk等的文件。就通过response实现这种下载文件、

    实现步骤:

    1.要获取下载文件的路径
    2.下载的文件名是啥?
    3.设置想办法让浏览器能够支持下载我们需要的东西
    4.获取下载文件的输入流
    5.创建缓冲区
    6.获取OutputStream对象
    7.将FileOutputStream流写入到buffer缓冲区
    8.使用OutputStream将缓冲区中的数据输出到客户端!

    代码:

    在maven项目的resources下放一个图片,这样项目发布的时候,用户就可以点击链接下载对应的文件:

    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URL;
    import java.net.URLEncoder;
    
    public class Resopn下载文件 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1、获取要下载文件的绝对路径
            String realPath = "F:\Maven\web-maven\servlet-03\target\classes\壁纸.png";
            System.out.println("下载的文件路径" + realPath);
            //2、下载的文件名是什么[截取文件绝对路径的最后一个后面的字符//右键复制的路径【可以】F:Mavenweb-mavenservlet-03	argetclasses壁纸.png
            String fileName = realPath.substring(realPath.lastIndexOf("\") + 1);
            //3、让浏览器能够支持我们下载的文件[如果文件名是中文就需要转码]
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            //4、获取下载文件的输入流
            FileInputStream fis = new FileInputStream(realPath);
            //5、创建缓冲区
            int len = 0;
            byte[] bytes = new byte[1024];
            //6、创建输出流
            ServletOutputStream sot = response.getOutputStream();
            //7、写出文件
            while ((len = fis.read(bytes)) != -1) {
                sot.write(bytes, 0, len);
                sot.flush();
            }
            //8、关闭流
            sot.close();
            fis.close();
        }
    }

    先码后看,这里没有什么难理解的,就是第三步是比较生疏的,要用的话就上网查询一下就好了。

     拓展:

    1、点击一个链接,或者是超链接,或者是表单,就可以下载资源就很好。

    所以我们新增一个JSP页面,让用户点击这个页面上面的按钮,进行下载文件:

    2、EL, Expression Language,表达式语言,是一种在JSP页面中获取数据的简单方式。EL表达式是从JSP2.0版本开始才引入的概念。EL表达式的基本语法形式很简单:在JSP页面的任何静态部分均可通过${变量}的形式获取到指定表达式的值。

    3、解释一下${pageContext.request.contextPath}取出部署的应用程序名或者是当前的项目名称

    4、注意:如果EL表达式没有提示的话,就在Maven项目中的pro.xml文件中添加:

    1
    2

    3

    4

    5

    6

    <dependency>

          <groupId>javax.servlet</groupId>

          <artifactId>jsp-api</artifactId>

          <version>2.0</version>

          <scope>provided</scope>

    </dependency>

  • 相关阅读:
    ES6标准入门 第一章:简介
    vue调试工具之 vue-devtools的安装
    vue 高德地图之玩转周边
    vue-动手做个选择城市
    js 高级算法
    (转)预处器的对比——Sass、LESS和Stylus
    windows下安装mongodb以及node.js连接mongodb
    vue组件(将页面公用的头部组件化)
    浅谈移动端rem的用法
    vue 调用高德地图
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14127313.html
Copyright © 2011-2022 走看看