入门JavaWeb之 Response 下载文件

web 服务器接收到客户端的 http 请求

针对这个请求,分别创建一个代表请求的 HttpServletRequest 对象,代表响应的 HttpServletResponse 对象

获取客户端请求过来的参数:HttpServletRequest

给客户端响应一些信息:HttpServletResponse

下载文件:

1.获取下载文件的路径

2.下载的文件名

3.让浏览器支持下载

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

5.创建缓冲区

6.获取 OutputStream 对象

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

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

pom.xml 导入 jar 包

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>

 getRealPath 绝对路径,resources 放入需要下载的文件

substring 截取字符串

setHeader 文件头信息

resp.setHeader("Content-disposition","attachment;filename"+fileName);

new FileInputStream 输入流

new byte[1024]

getOutputStream 输出流

读数据、写数据

关闭流

web.xml 注册和映射:

    <servlet>
        <servlet-name>down</servlet-name>
        <servlet-class>com.demo.response.FileDown</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>down</servlet-name>
        <url-pattern>/down</url-pattern>
    </servlet-mapping>

(如果重新创建了 Module,Smart Tomcat 也要添加一个自己创建的路径)

代码如下:

package com.demo.response;

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.io.PrintWriter;


public class FileDown extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //1.获取下载文件的路径
        //getRealPath 绝对路径
        String realPath = this.getServletContext().getRealPath("/1.png");
        //String realPath = "D:\\IntelliJProject\\javaweb\\response\\target\\classes\\com\\1.png";

        //2.下载的文件名
        //substring 截取字符串  /需要转义,用\\,+1获取下一个
        String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);

        //3.让浏览器支持下载
        //setHeader 文件头信息,固定写法
        resp.setHeader("Content-disposition","attachment;filename"+fileName);
        //URLEncoder.encode编码支持中文
        //resp.setHeader("Content-disposition","attachment;filename"+ URLEncoder.encode(fileName,"UTF-8"));

        //4.获取下载文件的输入流
        FileInputStream fileInputStream = new FileInputStream(realPath);

        //5.创建缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];

        //6.获取 OutputStream 对象,输出流
        ServletOutputStream outputStream = resp.getOutputStream();

        //7.将 FileOutputStream 流写入到 buffer 缓冲区
        //8.使用 OutputStream 将缓冲区中的数据输出到客户端
        while ((len = fileInputStream.read(buffer))!=-1){ //>0也行
            outputStream.write(buffer,1,len); //从1到len长度
        }

        //IO流后开先关
        outputStream.close();
        fileInputStream.close();

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/749039.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】五、哈希表相关:统计重复元素 + 找不同

文章目录 1、哈希表结构2、Java中的哈希表3、leetcode217&#xff1a;统计重复元素4、leetcode389&#xff1a;找不同5、leetcode496&#xff1a;下一个更大元素 1、哈希表结构 又叫散列表&#xff0c;存键值对&#xff0c;将key用哈希函数转为数组下标索引 当两个不同的key经…

多功能气象传感器的工作原理

TH-WQX9多功能气象传感器是一种集成了多种传感器技术的气象观测装置&#xff0c;旨在同时测量和监测大气中的多个气象要素&#xff0c;以提供全面、准确的气象信息。以下是关于多功能气象传感器的详细介绍&#xff1a; 技术原理 多功能气象传感器采用多种传感器技术相结合&…

[C++][设计模式][原型模式]详细讲解

1.动机 在软件系统中&#xff0c;经常面临这“某些结构复杂的对象”的创建工作&#xff1b;由于需求的变化&#xff0c;这些对象经常面临着剧烈的变化&#xff0c;但是它们却拥有比较稳定一致的接口如何应对这种变化&#xff1f;如何向“客户程序(使用这些对象的程序)”隔离出…

【FFmpeg】avformat_alloc_output_context2函数

【FFmpeg】avformat_alloc_output_context2函数 1.avformat_alloc_output_context21.1 初始化AVFormatContext&#xff08;avformat_alloc_context&#xff09;1.2 格式猜测&#xff08;av_guess_format&#xff09;1.2.1 遍历可用的fmt&#xff08;av_muxer_iterate&#xff0…

正版软件 | DupInOut Duplicate Finder:智能清理,让数据井然有序

在信息爆炸的时代&#xff0c;我们经常面临数据管理的挑战。DupInOut Duplicate Finder 是一款专为Windows 设计的重复文件查找工具&#xff0c;帮您快速识别并删除重复的文档、音乐、视频和照片&#xff0c;让您的计算环境更加清洁、有序。 精准查找&#xff0c;一键删除 DupI…

DM达梦数据库转换、条件函数整理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

硬件开发笔记(二十二):AD21软件中创建元器件AXK5F80337YG原理图库、封装库和3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140007117 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

怎么扫描图片变成pdf格式?办公人士值得收藏的宝藏工具

将图片扫描并转换为PDF格式可以通过多种途径实现&#xff0c;无论是使用专业的扫描仪还是智能手机&#xff0c;都有相应的方法。 PDF 是什么&#xff1f; PDF&#xff0c;全称为 Portable Document Format&#xff08;便携式文档格式&#xff09;&#xff0c;是由Adobe System…

使用宝塔安装ModstartCMS (非一键安装)

操作系统 Linux Windows 推荐 Linux 操作系统&#xff0c;性能比较好 软件环境 稳定版 PHP 5.6 PHP 7.0 MySQL >5.0 PHP Extension&#xff1a;Fileinfo Apache/Nginx Laravel 9.0 版本 PHP 8.1 MySQL >5.0 PHP Extension&#xff1a;Fileinfo Apache/Ngin…

DLS策略洞察:如何应对AI数据中心网络交换机市场的爆发式增长?

摘要&#xff1a; 随着AI技术的发展和应用&#xff0c;AI数据中心对网络交换机的需求日益增加。摩根士丹利预计&#xff0c;2023-2026年间&#xff0c;AI数据中心网络交换机的收入复合年增长率&#xff08;CAGR&#xff09;将达到55%。本文将详细分析AI数据中心网络交换机市场…

Springboot + Mybatis-Plus代码生成指南

使用 Spring Boot 和 MyBatis-Plus 生成代码&#xff0c;可以大大简化开发流程&#xff0c;可以保持编码的规范性&#xff0c;生成单元测试等。以下是详细步骤&#xff1a; 配置pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>myb…

Arcgis 计算经纬度坐标并补齐6位小数

工作中我们经常需要在Arcgis中计算点的经纬度或者线的起点、终点坐标&#xff0c;为确保数据的准确性&#xff0c;我们必须保留6位小数&#xff0c;但我们在默认计算的时候偶尔会遇到算出来的经纬度坐标小数位不足6位&#xff0c;那我们应该如何补齐呢&#xff0c;这里我将方法…

如何不改变 PostgreSQL 列类型#PG培训

开发应用程序并在其背后操作数据库集群时&#xff0c;会遇到一个意想不到的问题是实践与理论、开发环境与生产之间的差异。这种不匹配的一个完美例子就是更改列类型。 #PG考试#postgresql培训#postgresql考试#postgresql认证 关于如何在 PostgreSQL&#xff08;以及其他符合 SQ…

Hugo Barra对Apple Vision Pro 硬件和软件的详细评述

原文&#xff1a;hugo.blog/2024/03/11/vision-pro 这篇文章的作者是Hugo Barra。Hugo Barra曾是Meta公司&#xff08;前身为Facebook&#xff09;旗下Oculus VR/AR团队的负责人。他在2017年至2020年期间领导了Oculus的团队&#xff0c;参与了多个VR头显的开发和发布。Hugo Bar…

MySQL详细介绍:开源关系数据库管理系统的魅力

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

未来20年人工智能将如何塑造社会

照片由Brian McGowan在Unsplash上拍摄 更多资讯&#xff0c;请访问 2img.ai “人工智能会成为我们的救星还是我们的末日&#xff1f;” 几十年来&#xff0c;这个问题一直困扰着哲学家、科学家和科幻爱好者。 当我们踏上技术革命的边缘时&#xff0c;是时候透过水晶球&#x…

从0开始编写VS1053音频解码芯片的底层驱动代码(适用于任何单片机)

VS1053是一个高性能的音频解码器芯片,它是干什么的? 他有两个功能:()用来解码音频文件播放音乐的。(2)将麦克风听到的声音编码成音频文件数据,配合单片机可以保存到SD卡。 单片机加上一个VS1053就可以轻松做一个音乐播放器、一个录音机 等项目。 VS1053支持两种协议:…

Visio文件编辑查看工具:Visio Viewer for Mac 激活版

Visio Viewer 软件通过该软件&#xff0c;用户可以在没有Visio软件的情况下查看使用Visio创建的绘图和图表&#xff0c;方便用户对复杂信息的可视化、分析和交流。Visio Viewer 2007是一个功能强大的软件&#xff0c;它可以帮助IT和商务专业人员轻松地可视化、分析和交流复杂信…

AI论文降重:一键操作,让你的论文查重率瞬间下降

高查重率是许多毕业生的困扰。通常&#xff0c;高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法&#xff0c;如修改文本和增添原创内容&#xff0c;虽必要但耗时且成效不一。 鉴于此&#xff0c;应用AI工具进行AIGC降重成为了一个高效的解决方案。这些工具…

PyCharm 2024.1最新变化

PyCharm 2024.1 版本带来了一系列激动人心的新功能和改进&#xff0c;以下是一些主要的更新亮点: Hugging Face 模型和数据集文档预览&#xff1a;在 PyCharm 内部快速获取 Hugging Face 模型或数据集的详细信息&#xff0c;通过鼠标悬停或使用 F1 键打开文档工具窗口来预览。 …