博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POST 请求实现任意的文件下载
阅读量:3947 次
发布时间:2019-05-24

本文共 1602 字,大约阅读时间需要 5 分钟。

JAVA配合POST请求实现任意的文件下载(含前端代码)

一、前言

在最近项目开发中,有一需求是根据请求参数构建文件后,下载下来。

  在我研究文件下载方式中,发现大部分文件请求获取是以Get请求为主的。但这种情况大部分是文件已经存在,只需要直接获取即可。

  因此本次记录一下依靠POST请求进行文件的下载和返回。

二、代码

  • 前置工作

    • JAVA:Springboot、SpringMVC、hutool。
    • JS:vue、axios。
    • 文件:D盘任一文件,文中准备了一个zip文件。
  • JAVA

@RestController@RequestMapping("/api/file")public class FileController {
@PostMapping public 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.data let url = window.URL.createObjectURL(new Blob([data])) let link = document.createElement('a') link.style.display = 'none' link.href = url link.setAttribute('download', 'form.zip') // 需要文件名字 document.body.appendChild(link) link.click() })

三、不足

下载的文件的名字为js代码设置的form.zip而不是后端设置的文件名。

转载地址:http://bxgwi.baihongyu.com/

你可能感兴趣的文章
SQL Server表存在则进行查重 SQL语句
查看>>
redhat 9 下sqlite 3的安装及编程
查看>>
两个同步表的字段复制.Oracle.
查看>>
windows MySQL 报“Got a packet bigger than 'max_allowed_packet' bytes”错误,解决过程.
查看>>
MFC ADO连MySQL,使用数据源.
查看>>
在Redhat9下静态编译glib库.
查看>>
在ubuntu12下静态编译freetype库.
查看>>
CImg库编译使用.
查看>>
SQL Server循环执行动态SQL语句.
查看>>
windows MySQL报"2006 - MySQL server has gone away"错误,解决过程.
查看>>
ubuntu10.4网卡名由eth0改为eth4,导致获得不了IP地址.解决方法.
查看>>
CheckPoint关键词做字段名使用.
查看>>
Qt QSplitte分割器使用(用户手动改变窗口大小)
查看>>
根据高度图计算体积等。
查看>>
Qt动态加载动态库
查看>>
使用VS2015创建纯C动态库。
查看>>
MFC和Qt分别使用Qt生成的Dll。
查看>>
Qt安装路径中的platforms文件夹
查看>>
Qt5 Crash When Open File With QFileDialog
查看>>
关于Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的解决方法
查看>>