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 请求实现任意的文件下载相关推荐

  1. RxHttp 让你眼前一亮的Http请求框架

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨不怕天黑 来源丨掘金 https://juej ...

  2. 为何看完这篇RxHttp Http请求框架会觉得如此销魂,全文干货建议收藏!

    前言 RxHttp相较于retrofit,功能上,两者均能实现,并无多大差异,更多的差异体现功能的使用上,也就是易用性,如对文件上传/下载/进度监听的操作上,RxHttp用及简的API,可以说碾压re ...

  3. RxHttp 一款让你眼前一亮的 Http 请求框架

    本文系 RxHttp作者不怕天黑 向本博客投稿,并授权在本站发表. 1.前言 RxHttp在今年4月份一经推出,就受到了广大Android 开发者的喜爱,截止本文发表在github上已有1100+st ...

  4. [转]HTTP请求模型和头信息

    原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html 目录 一.连接至Web服务器 二.发送HTTP请求 三.服务端接受请求 ...

  5. Scrapy - Request 和 Response(请求和响应)

    Requests and Responses:http://doc.scrapy.org/en/latest/topics/request-response.html Requests and Res ...

  6. 文件下载显示进度条以及调取浏览器下载进程

    最近遇见项目的文件下载功能 总结了两种获取文件下载进度的方法 1 .axios 在axios里可调取onUploadProgress方法来获取 通过判断是否存在lengthComutable来获取下载 ...

  7. java基于http协议客户端与服务器端的交互,通俗易懂客户端与服务器端交互原理(HTTP数据请求与HTTP响应,包括Servlet部分...

    经 常看到HTTP客户端与服务器端交互原理的各种版本的文章,但是专业术语太多,且流程过于复杂,不容易消化.于是就按照在 Servlet 里面的内容大致做了一些穿插.本来 连 Tomcat 容器 和 S ...

  8. JavaWeb核心|请求和响应

    文章目录 一.请求对象 1.1 请求对象介绍 1.2 请求对象常用方法-获取各种路径 1.3 请求对象常用方法-获取请求头信息 1.4 请求对象常用方法-获取请求参数信息 1.5 获取请求参数并封装对 ...

  9. java上传下载_Java文件上传与文件下载实现方法详解

    本文实例讲述了Java文件上传与文件下载实现方法.分享给大家供大家参考,具体如下: Java文件上传 数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传.文件上传是数据上传 ...

  10. CakePHP 2.x CookBook 中文版 第五章 控制器 之 请求和响应对象

    请求和响应对象 在 CakePHP 2.0 中请求和响应对象是新的.在之前的版本中,这些对象是用数组来表示的,相关的方法分散在RequestHandlerComponent.Router. Dispa ...

最新文章

  1. Go: 分布式学习利器(2)-- Go中的变量,常量 以及与其他语言变量之间的差异
  2. Eclipse导出可执行Jar文件(包含第三方Jar包)
  3. 在layui中使用ajax传值给后台,解决layui批量传值到后台操作时出现传值为空的问题...
  4. 【C/C++10】天气APP:MySQL/PostgreSQL,环境变量/动静态库,Linux/Oracle字符集
  5. 《朝花夕拾》金句摘抄(一)
  6. android中虚拟程序停止,为什么我的在虚拟机运行后出现应用程序停止运行
  7. mkv210_image.c详解
  8. 偶尔看到的c11新特性1
  9. 中国计算机管理软件学院,中国管理软件学院官方网站
  10. JS 初级 二(接上)
  11. JAVA 使用SSH/springboot集成 CXF框架发布Webservice
  12. linux检测不到声卡设备,解决 Deepin V20、Ubuntu 20.04、Linux Mint 20 声卡无法识别导致的没有声音...
  13. 冒泡详解(分析每一步)
  14. Linux初识及常用命令
  15. EDA技术(VHDL)——0~9999的计数器电路的设计
  16. prim算法之处女作
  17. php人民币函数,php人民币小写转大写的函数,不限长度,精确到分(推荐)
  18. git下载子模块命令git clone --recursive和git submodule update --init
  19. 基于SDWAN的智能选路技术实现
  20. android开发笔记之Google Analytics

热门文章

  1. Excel列宽在哪里设置?Excel怎么设置行高和列宽
  2. 计算机网络什么属于广域网,以什么将网络划分为广域网和局域网
  3. Linux 打包压缩(tar、gzip、bzip、xz)备份(备份dump genisoimage 还原restore)
  4. 二极管计算机原理,二极管逻辑电路
  5. ps保存html和图像格式不显示,解决ps“储存为web和设备所用格式”灰色不能使用的方法...
  6. 非常好用的模糊pid温度控制算法_PID参数调试“口诀”,总结的真好!
  7. 效率至上 计算机使用规范
  8. 神经网络matlab 验证集,机器学习中训练集、验证集、测试集的定义和作用
  9. PS 前端技能一 白色背景图片变为透明的图片
  10. 一本通1373:鱼塘钓鱼(fishing)