Java Response实现文件下载

2023-11-12

Servlet代码:

public class ResponseFileServlet extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      downfile(response);

   }

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      downfile(response);

   }

   private void downfile(HttpServletResponse response) throws IOException {

   //获取下载的文件路径(注意获取这里获取的是绝对路径,先获取ServletContext再使用ServletContext的getRealPath方法获取绝对路径)

   String path = this.getServletContext().getRealPath("/Resourse/Student.xml");

   //设置响应头控制浏览器以下载的形式打开文件

   response.setHeader("content-disposition",

"attachment;fileName="+"Student.xml");

   InputStream in = new FileInputStream(path); //获取下载文件的输入流

   int count =0;

   byte[] by = new byte[1024];

   //通过response对象获取OutputStream流

    OutputStream out=  response.getOutputStream();

   while((count=in.read(by))!=-1){

      out.write(by, 0, count);//将缓冲区的数据输出到浏览器

   }

   in.close();

   out.flush();

   out.close();}}

从上面代码可以看出使用Response实现文件下载思路主要分为:

先获取下载文件的绝对路径,再设置响应头(content-disposition)表示告知浏览器要以下载的形式打开文件,然后使用InputStream获取下载的文件的输入流,创建数据缓冲区,通过response对象获取OutputStream流,将FileInputStream流写入byte数组,使用OutpuStream将byte数组的数据输出到浏览器。

运行结果:

下载文件名称带有中文的文件,需要在下面设置响应头那里使用URLEncoder.encode方法设置编码,避免文件名乱码,代码如下

//下载带有中文名称的文件

   response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode("IO笔记.txt","UTF-8"));

效果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Response实现文件下载 的相关文章

随机推荐

  • java操作excel表格详解

    在日常工作中 对Excel工作表格的操作处理可是多的数不清楚 下面是java语言对其的操作 有需要的小伙伴可以参考下 使用场景 1 将用户信息导出为excel表格 导出数据 2 将Excel表中的信息录入到网站数据库 习题上传 大大减轻网站
  • 【爬虫+可视化】Python爬取疫情数据,并做可视化展示

    知识点 爬虫基本流程 json requests 爬虫当中 发送网络请求 pandas 表格处理 保存数据 pyecharts 可视化 开发环境 python 3 8 比较稳定版本 解释器发行版 anaconda jupyter noteb
  • MPI 和OPENMP 混合编程 实现矩阵LU分解

    LU分解 将系数矩阵A转变成等价两个矩阵L和U的乘积 其中L和U分别是下三角和上三角矩阵 当A的所有顺序主子式都不为0时 矩阵A可以分解为A LU 且分解唯一 其中L是单位下三角矩阵 U是上三角矩阵 方法 使用openMP和MPI混合编程现
  • Jeesite开发平台限制用户多点登录

    Jeesite开发平台限制用户多点登录 授权查询回调函数 进行鉴权但缓存中无用户的授权信息时调用 Override protected AuthorizationInfo doGetAuthorizationInfo PrincipalCo
  • web前端性能优化

    1 图片处理 图片压缩 使用图片图片压缩 优化工具TinyPNG TinyJPG压缩图片 或者使用其Gulp 组件gulp tinypng结合到自动化构件流程中 图片格式转为base64 使用webpack的url loader 自动根据文
  • MyBatis 的架构

    MyBatis 的架构 MyBatis 是一个基于 Java 的持久层框架 可以将 SQL 语句和 Java 代码进行分离 通过 XML 或注解的方式配置 SQL 语句并执行 从而实现数据访问的功能 MyBatis 的架构包括以下几个部分
  • Mysql 实战之——读写分离方案

    Linux环境 Centos 6 8 64 bit Mysql 版本 5 1 7 一 准备工作 部署Mysql主从复制 二 使用Amoeba数据库代理来实现读写分离 Amoeba作为数据库代理 以中间件的形式存在 拓扑图如下所示 Amoeb
  • cad多个窗口并排显示_CAD的入门小技巧

    在CAD中可以绘制二维 三维图形 也可以对图纸中的图形进行标注和进行渲染 比较广泛的应用于建筑 机械 环境工程 电子 设计等一些行业 启动与退出启动 1 在桌面双击CAD图标2 开始 程序 Autodesk Autodesk CAD CAD
  • got an unexpected keyword argument 'xxx'

    这几天在捣鼓pyecharts的地图功能
  • Windows Mobile 设备中心 for vista 一览

    2007年06月21日 14 30 00 Microsoft Windows Mobile 设备中心 6 1 在6月6日发布了最新版 今天为了能在Vista开发PPC 或Wince设备 程序 下载安装了该程序 启动后界面确实很炫 和媒体中心
  • 【论文合集】2022年11月医学影像期刊论文合集

    本月IEEE Transactions on Medical Imaging 1区 top if 11 037 共41篇 Medical Image Analysis 1区 top if 13 828 共47篇 标题高频词汇 segment
  • Non-terminating decimal expansion; no exact representable decimal result.

    日志信息 问题分析 由于 BigDecimal 是不可变的 任意精度的有符号十进制数 所以可以做精确计算 但在除法中 准确的商可能是一个无限长的十进制扩展 例如 1 除以 3 所得的商 若我们在做除法时 没有指定舍入模式 无法表示为准确的结
  • C# 串口通信 stm32 电机

    前几天已经完成了stm32通过PWM对电机的控制 这几天趁上班之余 也完成了c 通过串口通信控制电机的运行 界面如下 好久没写文章了 发现非常不擅长分享和表达 第一反应是演示出来 可惜这里不能有动画 功能不强大啊 哪天有空了 把上位机代码和
  • json库 nlohmann/json 的基本使用

    C 的json库有很多 但nlohmann 链接 https github com nlohmann json 大概是目前使用最方便的跨平台json库了 其可以让用户以modern C 的方式解析和构建json 性能比rapidjson库略
  • 安卓c语言获取context,Android中Context详解 ---- 你所不知道的Context

    二 什么时候创建Context实例 熟悉了Context的继承关系后 我们接下来分析应用程序在什么情况需要创建Context对象的 应用程序创建Context实例的 情况有如下几种情况 1 创建Application 对象时 而且整个App
  • 一点就通——ChatGPT翻译润色的最新简明使用方案

    prompt使用推荐 1 翻译prompt 翻译主要有两种 第一种是我们的老朋友厦门大学潘王雨昂 个人主页 pwya github io 所编写使用的prompt 第二种是我自己改造的 1 我希望你能担任英语翻译 拼写校对和修辞改进的角色
  • JAVA——JSch

    第 1 章 JSch简介 1 1 简述 1 jsch是ssh2的一个纯Java实现 它允许你连接到一个sshd服务器 使用端口转发 X11转发 文件传输等 2 SSH 是较可靠 专为远程登录会话和其他网络服务提供安全性的协议 3 ftp协议
  • 金融量化— 动量策略(Momentum Strategy)

    什么是动量效应和动量交易策略 动量效应是指过去收益较高的资产 在未来一段时间内仍获得较高的收益 过去收益较低的资产在未来仍获得较低的收益 对于动量效应现象的解释 传统金融学认为 动量效应的存在并不是市场无效的证据 并试图从理性风险补偿这一角
  • Vue中的Diff算法

    Vue中的Diff算法 本篇文章主要介绍Diff算法的思想和Vue中对Diff算法的基本实现 1 为什么要用Diff算法 由于在浏览器中操作DOM的代价是非常 昂贵 的 所以才在Vue引入了Virtual DOM Virtual DOM是对
  • Java Response实现文件下载

    Servlet代码 public class ResponseFileServlet extends HttpServlet public void doGet HttpServletRequest request HttpServletR