POST 请求实现任意的文件下载
JAVA配合POST请求实现任意的文件下载(含前端代码)
一、前言
在最近项目开发中,有一需求是根据请求参数构建文件后,下载下来。
在我研究文件下载方式中,发现大部分文件请求获取是以Get请求为主的。但这种情况大部分是文件已经存在,只需要直接获取即可。
因此本次记录一下依靠POST请求进行文件的下载和返回。
二、代码
前置工作
- JAVA:Springboot、SpringMVC、hutool。
- JS:vue、axios。
- 文件:D盘任一文件,文中准备了一个zip文件。
JAVA
@RestController
@RequestMapping("/api/file")
public class FileController {@PostMappingpublic void getFile(@RequestBody PostEntity entity, HttpServletResponse response) throws IOException {File file = new File("E:\\aa.zip");FileReader reader = new FileReader(file); // 使用hutool的开发工具包byte[] bytes = reader.readBytes();response.addHeader("content-type", "application/x-msdownload");//浏览器自己辨别文件类型response.addHeader("Content-Disposition", "attachment; filename=" + file.getName());response.addHeader("Content-Length", String.valueOf(bytes.length));ServletOutputStream outputStream = response.getOutputStream();outputStream.write(bytes);outputStream.flush();outputStream.close();}}
前端
this.$http.post("http://localhost:8000/api/file",{name : '123'},{responseType: 'blob', // 必填。}).then(res => {// 实质通过a链接触发文件下载let data = res.datalet url = window.URL.createObjectURL(new Blob([data]))let link = document.createElement('a')link.style.display = 'none'link.href = urllink.setAttribute('download', 'form.zip') // 需要文件名字document.body.appendChild(link)link.click()})
三、不足
下载的文件的名字为js代码设置的form.zip
而不是后端设置的文件名。
POST 请求实现任意的文件下载相关推荐
- RxHttp 让你眼前一亮的Http请求框架
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨不怕天黑 来源丨掘金 https://juej ...
- 为何看完这篇RxHttp Http请求框架会觉得如此销魂,全文干货建议收藏!
前言 RxHttp相较于retrofit,功能上,两者均能实现,并无多大差异,更多的差异体现功能的使用上,也就是易用性,如对文件上传/下载/进度监听的操作上,RxHttp用及简的API,可以说碾压re ...
- RxHttp 一款让你眼前一亮的 Http 请求框架
本文系 RxHttp作者不怕天黑 向本博客投稿,并授权在本站发表. 1.前言 RxHttp在今年4月份一经推出,就受到了广大Android 开发者的喜爱,截止本文发表在github上已有1100+st ...
- [转]HTTP请求模型和头信息
原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html 目录 一.连接至Web服务器 二.发送HTTP请求 三.服务端接受请求 ...
- Scrapy - Request 和 Response(请求和响应)
Requests and Responses:http://doc.scrapy.org/en/latest/topics/request-response.html Requests and Res ...
- 文件下载显示进度条以及调取浏览器下载进程
最近遇见项目的文件下载功能 总结了两种获取文件下载进度的方法 1 .axios 在axios里可调取onUploadProgress方法来获取 通过判断是否存在lengthComutable来获取下载 ...
- java基于http协议客户端与服务器端的交互,通俗易懂客户端与服务器端交互原理(HTTP数据请求与HTTP响应,包括Servlet部分...
经 常看到HTTP客户端与服务器端交互原理的各种版本的文章,但是专业术语太多,且流程过于复杂,不容易消化.于是就按照在 Servlet 里面的内容大致做了一些穿插.本来 连 Tomcat 容器 和 S ...
- JavaWeb核心|请求和响应
文章目录 一.请求对象 1.1 请求对象介绍 1.2 请求对象常用方法-获取各种路径 1.3 请求对象常用方法-获取请求头信息 1.4 请求对象常用方法-获取请求参数信息 1.5 获取请求参数并封装对 ...
- java上传下载_Java文件上传与文件下载实现方法详解
本文实例讲述了Java文件上传与文件下载实现方法.分享给大家供大家参考,具体如下: Java文件上传 数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传.文件上传是数据上传 ...
- CakePHP 2.x CookBook 中文版 第五章 控制器 之 请求和响应对象
请求和响应对象 在 CakePHP 2.0 中请求和响应对象是新的.在之前的版本中,这些对象是用数组来表示的,相关的方法分散在RequestHandlerComponent.Router. Dispa ...
最新文章
- Go: 分布式学习利器(2)-- Go中的变量,常量 以及与其他语言变量之间的差异
- Eclipse导出可执行Jar文件(包含第三方Jar包)
- 在layui中使用ajax传值给后台,解决layui批量传值到后台操作时出现传值为空的问题...
- 【C/C++10】天气APP:MySQL/PostgreSQL,环境变量/动静态库,Linux/Oracle字符集
- 《朝花夕拾》金句摘抄(一)
- android中虚拟程序停止,为什么我的在虚拟机运行后出现应用程序停止运行
- mkv210_image.c详解
- 偶尔看到的c11新特性1
- 中国计算机管理软件学院,中国管理软件学院官方网站
- JS 初级 二(接上)
- JAVA 使用SSH/springboot集成 CXF框架发布Webservice
- linux检测不到声卡设备,解决 Deepin V20、Ubuntu 20.04、Linux Mint 20 声卡无法识别导致的没有声音...
- 冒泡详解(分析每一步)
- Linux初识及常用命令
- EDA技术(VHDL)——0~9999的计数器电路的设计
- prim算法之处女作
- php人民币函数,php人民币小写转大写的函数,不限长度,精确到分(推荐)
- git下载子模块命令git clone --recursive和git submodule update --init
- 基于SDWAN的智能选路技术实现
- android开发笔记之Google Analytics
热门文章
- Excel列宽在哪里设置?Excel怎么设置行高和列宽
- 计算机网络什么属于广域网,以什么将网络划分为广域网和局域网
- Linux 打包压缩(tar、gzip、bzip、xz)备份(备份dump genisoimage 还原restore)
- 二极管计算机原理,二极管逻辑电路
- ps保存html和图像格式不显示,解决ps“储存为web和设备所用格式”灰色不能使用的方法...
- 非常好用的模糊pid温度控制算法_PID参数调试“口诀”,总结的真好!
- 效率至上 计算机使用规范
- 神经网络matlab 验证集,机器学习中训练集、验证集、测试集的定义和作用
- PS 前端技能一 白色背景图片变为透明的图片
- 一本通1373:鱼塘钓鱼(fishing)