file-upload-download

方式一

情况1:
	@PostMapping("/download1")public ResponseEntity<byte[]> download1() throws Exception {// 下载文件目录位置FileInputStream fis = new FileInputStream("C:\\Users\\wsd\\Pictures\\susu.jpg");// 一次读取bytes.length 个字节并将读到的字节放入bytes数组中byte[] bytes = new byte[fis.available()];fis.read(bytes);fis.close();HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.add("Content-Disposition", "attachment;filename=" + "download-name-001.jpg");// 将要下载的文件的字节流返回给浏览器return new ResponseEntity<>(bytes, httpHeaders, HttpStatus.OK);}
情况2:
	// 下载文件名包含中文,需要解析@PostMapping("/download2")public ResponseEntity<byte[]> download2() throws Exception {// 下载文件目录位置FileInputStream fis = new FileInputStream("C:\\Users\\wsd\\Pictures\\susu.jpg");// 一次读取bytes.length 个字节并将读到的字节放入bytes数组中byte[] bytes = new byte[fis.available()];fis.read(bytes);fis.close();HttpHeaders httpHeaders = new HttpHeaders();String downloadFileName = "下载命名-001.jpg";httpHeaders.add("Content-Disposition","attachment;filename=" + URLEncoder.encode(downloadFileName,"UTF-8"));// 将要下载的文件的字节流返回给浏览器return new ResponseEntity<>(bytes, httpHeaders, HttpStatus.OK);}

方式二

	// 无返回值@PostMapping("/download3")public void download3(HttpServletResponse response) throws IOException {// 下载文件目录位置FileInputStream fis = new FileInputStream("C:\\Users\\wsd\\Pictures\\susu.jpg");// 一次读取bytes.length 个字节并将读到的字节放入bytes数组中byte[] bytes = new byte[fis.available()];fis.read(bytes);fis.close();String downloadFileName = "下载命名-001.jpg";response.addHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(downloadFileName,"UTF-8"));response.setContentType("application/octet-stream");OutputStream os = response.getOutputStream();os.write(bytes);os.flush();os.close();}

方式三

使用 try-with-resources

	@PostMapping("/download4")public String download4(HttpServletResponse response) throws IOException {JSONObject jsonObject = new JSONObject();response.reset();response.setCharacterEncoding("utf-8");String downloadFileName = "下载命名-001.jpg";response.addHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(downloadFileName,"UTF-8"));response.setContentType("application/octet-stream");// 下载文件目录位置String filePath = "C:\\Users\\wsd\\Pictures\\susu.jpg";// 使用 try-with-resourcestry (FileInputStream fis = new FileInputStream(filePath);OutputStream os = response.getOutputStream()) {byte[] buffer = new byte[fis.available()];int len;while ((len = fis.read(buffer)) != -1) {os.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();}jsonObject.put("success", "下载成功");return jsonObject.toJSONString();}

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

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

相关文章

Sqli-labs靶场第16关详解[Sqli-labs-less-16]自动化注入-SQLmap工具注入

Sqli-labs-Less-16 #自动化注入-SQLmap工具注入 SQLmap用户手册&#xff1a;文档介绍 - sqlmap 用户手册 以非交互式模式运行 --batch 当你需要以批处理模式运行 sqlmap&#xff0c;避免任何用户干预 sqlmap 的运行&#xff0c;可以强制使用 --batch 这个开关。这样&#xff0…

【视频编码\VVC】多样化视频编码工具了解

除了通用编码工具&#xff0c;VVC还针对特定特性的全景视频、屏幕视频开发了特定的编码工具。 全景视频编码 360度全包围视角的球面视频。为了采用传统的视频编码&#xff0c;全景视频需要转换为平面视频&#xff0c;经纬度等角映射&#xff08;ERF&#xff09;、立方体映射&…

PostgreSQL操作笔记

基础操作 数据库相关 -- 查看所有数据库 \l-- 切换到指定数据库 \c 库名-- 查看库中所有表 \d执行SQL脚本 如果有现成的SQL脚本&#xff1a; \i 脚本路径路径一般需要用单引号引起来。 如果需要当场编辑一次性的SQL脚本&#xff0c;可以&#xff1a; \e执行上述命令后会进…

GC机制以及Golang的GC机制详解

要了解Golang的GC机制,就需要了解什么事GC,以及GC有哪几种实现方式 一.什么是GC 当一个电脑上的动态内存不再需要时&#xff0c;就应该予以释放&#xff0c;以让出内存&#xff0c;这种内存资源管理&#xff0c;称为垃圾回收&#xff08;Garbage Collection&#xff09;&#x…

最长上升子序列(LIS)简介及其例题分析

一.最长上升子序列&#xff08;LIS&#xff09;的相关知识 1.最长上升子序列&#xff08;Longest Increasing Subsequence&#xff09;&#xff0c;简称LIS&#xff0c;也有些情况求的是最长非降序子序列&#xff0c;二者区别就是序列中是否可以有相等的数。假设我们有一个序…

【论文笔记】Initializing Models with Larger Ones

Abstract 介绍权重选择&#xff0c;一种通过从预训练模型的较大模型中选择权重子集来初始化较小模型的方法。这使得知识从预训练的权重转移到更小的模型。 它还可以与知识蒸馏一起使用。 权重选择提供了一种在资源受限的环境中利用预训练模型力量的新方法&#xff0c;希望能够…

代码随想录Day67 | 695.岛屿的最大面积 1020.飞地的数量

代码随想录Day67 | 695.岛屿的最大面积 1020.飞地的数量 695.岛屿的最大面积1020.飞地的数量 695.岛屿的最大面积 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 状态 采用bfs&#xff0c;这道题相较于之前的题变为了求岛屿的最大面积。那就说明我们每遇到一个新的岛屿…

【Linux】软件管理yum | 编辑器vim | vim插件安装

目录 1. Linux软件管理yum 1.1 什么是软件包 1.2 查看软件包 1.3 如何安装软件 1.4 如何卸载软件 2. Linux编辑器vim 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2.6 插件安装 1. Vim-Plug 3. coc.nvim …

如何自己系统的学python

学习Python是一项很好的投资&#xff0c;因为它是一种既强大又易于学习的编程语言&#xff0c;适用于多种应用&#xff0c;如数据分析、人工智能、网站开发等。下面是一个系统学习Python的步骤建议&#xff1a; 基础准备 安装Python&#xff1a; 访问Python官网下载最新版本的…

微服务获取当前登录用户信息

一&#xff0c;实现思路 1&#xff0c;基于JWT令牌登陆方式 JWT实现登录的&#xff0c;登录信息就保存在请求头的token中。因此要获取当前登录用户&#xff0c;只要获取请求头&#xff0c;解析其中的token。 1&#xff09;&#xff0c;Gateway网关拦截&#xff0c;解析用户信…

微信小程序-生命周期

页面生命周期 onLoad: 页面加载时触发的方法&#xff0c;在这个方法中可以进行页面初始化的操作&#xff0c;如获取数据、设置页面状态等。 onShow: 页面显示时触发的方法&#xff0c;在用户进入页面或从其他页面返回该页面时会调用此方法。可以在此方法中进行页面数据刷新、动…

Onenote软件新建笔记本时报错:无法在以下位置新建笔记本

报错现象&#xff1a; 当在OneNote软件上&#xff0c;新建笔记本时&#xff1a; 然后&#xff0c;尝试重新登录微软账户&#xff0c;也不行&#xff0c;提示报错&#xff1a; 解决办法&#xff1a; 打开一个新的记事本&#xff0c;复制粘贴以下内容&#xff1a; C:\Users\Adm…

Mysql中的事务

什么是事务&#xff1a; 多条sql语句&#xff0c;要么全部成功&#xff0c;要么全部失败。 事务的特性&#xff1a; 1&#xff1a;原子性(Atomic)&#xff1a; 组成一个事务的多个数据库操作是一个不可分割的原子单元&#xff0c;只有所有操作都成功&#xff0c;整个事务才会…

在Unity中模拟实现手势识别功能

在虚拟现实(VR)和增强现实(AR)的应用开发中&#xff0c;手势识别技术扮演着至关重要的角色&#xff0c;它允许用户以自然的方式与虚拟世界进行交云。然而&#xff0c;并非所有开发者都有条件使用真实的手势识别硬件。本文介绍了如何在Unity中通过模拟的方式实现一个简单的手势识…

【LeetCode】1768_交替合并字符串_C

题目描述 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 https://leetcode.cn/problems/merge-strings-al…

C++调用lua函数

C 调用Lua全局变量(普通) lua_getglobal(lua, "width");int width lua_tointeger(lua,-1);lua_pop(lua,1);std::cout << width << std::endl;lua_close(lua); 这几行代码要放到lua_pcall(lua, 0,0,0);之后才可以. C给lua传递变量 lua_pushstring(lua, …

Python 操作 Excel,如何又快又好?

➤数据处理是 Python 的一大应用场景&#xff0c;而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时&#xff0c;难免要和 Excel 打交道。Python处理Excel 常用的系列库有&#xff1a;xlrd、xlwt、xlutils、openpyxl ◈xlrd &#xff0d; 用于读取 Exce…

点云从入门到精通技术详解100篇-基于点云网络和 PSO 优化算法的手势估计(续)

目录 3 深度图像处理及转化 3.1 双目深度摄像原理及深度图的获取 3.1.1 理想化双目深度相机成像

day47_servlet

今日内容 0 复习昨日 1 接收请求 2 处理响应 0 复习昨日 HTTP请求中 请求行 请求方法,请求路径 请求头 页面信息 请求正文 请求的数据 HTTP响应中 响应行 状态码 信息 响应头 页面信息 响应正文 要给浏览器的内容 1 接收请求 浏览器发出请求,经过web.xml映射匹配,找到Servlet…

STL容器之map和set

map和set ​ c98支持的是单参数的隐式类型转换&#xff0c;而c11支持多参数的隐式类型转换&#xff1b; 1.map和set的使用 1.1set ​ set实现key值不允许修改&#xff0c;是将iterator转变成const_iterator&#xff1b;可以对同一个类型typedef成两个不同的自定义标识符。即…