浏览器向客户端提供文件下载(Java实现)

场景:
某一系统需上传黑白名单时,需向用户提供导入模板,这时候需要为客户端提供文件模板下载,用户按照该模板格式填写内容。

package com.wyw.learn.upOrdownload.service;import lombok.RequiredArgsConstructor;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.net.URLEncoder;/*** @author name:    silk* @version 1.0* @description: TODO* @date 2024/7/4 20:38*/
@Service
@RequiredArgsConstructor
public class TestServiceImpl {public void download(HttpServletRequest request, HttpServletResponse response) {try {// 这个zip文件要放在根目录地下的template文件夹下String path = "template/黑/白名单导入模板.zip";ClassPathResource resource = new ClassPathResource(path);// 读取到流中try (InputStream inputStream = resource.getInputStream()){String filename = new File(path).getName();// 重置响应对象。比如:清空缓冲区、重置响应头、重置响应状态码、取消响应内容的提交response.reset();// 告诉浏览器或其他客户端程序不要解析响应的内容,而是将其作为二进制数据下载到本地。如果是 application/octet-stream,浏览器会提示用户下载文件,而不是尝试在浏览器中打开它// Content-Disposition 告诉浏览器以附件形式下载文件,并指定下载时使用的文件名。这样,浏览器会提示用户下载 filename 文件,而不是在浏览器中打开它response.setContentType("application/octet-stream");response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));ServletOutputStream outputStream = response.getOutputStream();byte[] b = new byte[1024];int len;// 从输入流中读取一定量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1while ((len = inputStream.read(b)) > 0) {outputStream.write(b, 0 ,len);}}} catch (Exception e) {e.printStackTrace();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot课堂考勤系统-计算机毕业设计源码94408

目 录 1 绪论 1.1 选题背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 课堂考勤系统系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.3 系统用例分析 2.4 系统流程分析 2.…

免费的鼠标连点器哪个好用?5款2024年最新鼠标连点器分享

鼠标连点器是电脑网络游戏爱好者并不陌生的游戏辅助工具,他在FPS、RTS、moba等游戏种类中发挥着重要作用。可以帮助玩家的鼠标完成各种简单点击动作。轻松实现游戏刷机升级。让你游戏升级不再“肝”,轻松刷图升级,秒表大佬不是梦!…

使用getline()从文件中读取一行字符串

我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时,该方法的功能就变成了从指定文件…

电传动无杆飞机牵引车交付用户

自2019年起,我们计划做电传动控制,先后做了电传动水泥搅拌罐车罐体控制(国内首创),初步理解了电机控制的特点。 20-21年接着做了10t飞机牵引车控制,还是电液控制联合的,把越野叉车的行驶控制方…

Blender渲染慢?那是你还不知道这5个技巧

Blender是一款功能强大且用途广泛的软件,可帮助 3D 艺术家和动画师创作出色的视觉内容。如果您使用过 Blender,您就会知道渲染可能非常耗时。渲染时间过长可能会令人烦恼并限制创造力。 在这篇文章中,我们将提供一些专家提示和想法以加快 Bl…

一文搞懂MySsql的Buffer Pool

Buffer Pool是什么 Buffer Pool是MySQL数据库中一个非常关键的组件。数据库中的数据最终都是存放在磁盘文件上的。但是在对数据库执行增删改查操作时,不可能直接更新磁盘上的数据。因为如果直接对磁盘进行随机读写操作,那速度是相当的慢的。随便一个大磁…

软考(高项)系统分析师--论文写作技巧

文章目录 前言一、论文的结构和要求:1.1 论文的结构:1.2 论文的要求: 二、论文每段的写法:2.1 解题:2.2 摘要:2.2.1 第一段:2.2.2 第二段: 2.3 正文:2.3.1 项目背景&…

TikTok美区日销二十万美金爆款黑马!胸贴赛道成功起飞!

从去年开始,一项名为“No bra”(无胸罩)的挑战就长期刷屏TikTok。随着平台内各大博主和明星站台发声,越来越多用户也参与其中,话题的热度逐渐走向高潮。截止到目前, TikTok上相关话题累计播放量已高达8.3亿…

Eureka从入门到精通面试题及答案参考

什么是Eureka?它在微服务架构中扮演什么角色? Eureka是Netflix开源的一款基于REST的服务发现组件,它主要应用于构建分布式系统中的服务注册与发现。在微服务架构中,Eureka扮演着至关重要的角色,它让微服务架构中的各个服务实例能够互相发现、相互调用,从而实现了服务之间…

ubuntu 22.04配置国内镜像源-2024.7月最新版

Ubuntu 22.04 LTS这是一个长期支持版本,它将被支持五年,直到2027年4月。已发布的LTS版本带来了一些新的功能 国内有很多Ubuntu 22.04的镜像源,包括阿里、网易,还有很多教育网的镜像源,比如清华源、中科大源。 在教程中…

django admin添加自己的页面

建立模型 如果要单独建一个页面,用于展示model的数据,可以新建一个model,继承自要展示的那个类 class ViewsByDayModel(ViewsByDay): # 父类为要展示的model类class Meta:proxy True # 使用代理verbose_name 每日浏览次数统计verbose_nam…

仿Antd-mobile的Cascader实现省市区联动

为啥不直接用Cascader 级联选择组件呢?主要是因为作为老项目,已经引入了antd-mobile2.3.4,同时引入v5版本会有兼容性问题。 原始数据格式: 首先需要将后端返回的数据转为前端定义的格式,方便使用: [{&qu…

第二十六章 生成器(generator)(Python)

文章目录 前言一、生成器函数 前言 在 Python 中,使用了 yield 的函数被称为生成器(generator) yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值&#xff…

jsqlparse工具拦截sql处理和拓展

前置知识 访问者模式 (Visitor Pattern)是一种行为设计模式,它允许你定义在不改变被访问元素的类的前提下,扩展其功能。通过将操作(操作或算法)从对象结构中提取出来,可以在不修改这些对象的前…

网络扫描工具Nmap,用于发现网络中的主机和服务

Nmap 是一个非常强大的网络扫描工具,可以用于发现网络中的主机和服务。使用 Nmap 可以获取关于目标系统的各种信息,包括开放端口、操作系统版本、服务版本等。以下是如何使用 Nmap 以及一些常见的用例: 安装 Nmap 在 Ubuntu 22.04 上安装 N…

机器学习与模式识别_清华大学出版社

contents 前言第1章 绪论1.1 引言1.2 基本术语1.3 假设空间1.4 归纳偏好1.5 发展历程1.6 应用现状 第2章 模型评估与选择2.1 经验误差与过拟合2.2 评估方法2.3 性能度量2.3.1 回归任务2.3.2 分类任务 2.4 比较检验2.5 偏差与方差2.5.1 偏差-方差分解2.5.2 偏差-方差窘境 第3章 …

航空数据管控系统-②项目分析与设计:任务2:使用Git或SVN管理项目(可选任务,只介绍Git安装)

任务描述 1、安装Git 2、注册GitHub 3、配置本地库 4、配置远程库 5、使用Git管理项目 任务指导 分为以下几个部分完成: 学会Git的安装,帐号注册本地存储库的管理自己创建一个项目,项目名称为自己的名字,上传到代码仓库&#xff…

校验是否是合法日期字符串正则

常用的ui组件不支持日月的这种形式&#xff0c;产品提成要用input框的形式来做&#xff0c;且对输入字符串是否符合时间格式做校验&#xff0c;写起来还是很麻烦的&#xff0c;记录一下以后备用。 <script> /*** 校验是否是合法日期字符串* 支持格式&#xff1a;* …

符号速率、调制方式、码率、传输速率

符号速率、调制方式、码率&#xff08;比特率&#xff09;和传输速率在通信系统中是相互关联且重要的概念&#xff0c;它们之间的关系可以归纳如下&#xff1a; 一、定义 符号速率&#xff08;Symbol Rate&#xff09;&#xff1a; 也称波特率&#xff08;Baud Rate&#xff…

C++ STL容器:序列式容器-队queue,deque

摘要&#xff1a; CC STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;在C编程中的重要性不容忽视&#xff0c;STL提供了一系列容器、迭代器、算法和函数对象&#xff0c;这些组件极大地提高了C程序的开发效率和代码质量。 STL 容器 分为 2 大类 …