vue实现下载文件流完整前后端代码


Posted in Vue.js onNovember 17, 2020

使用Vue时,我们前端如何处理后端返回的文件流

首先后端返回流,这里我把流的动作拿出来了,我很多地方要用

/**
 * 下载单个文件
 *
 * @param docId
 */
 @GetMapping("/download/{docId}")
 public void download(@PathVariable("docId") String docId,
       HttpServletResponse response) {
  outWrite(response, docId);
 }
 
 /**
 * 输出文件流
 * @param response
 * @param docId
 */
 private void outWrite(HttpServletResponse response, String docId) {
  ServletOutputStream out = null;
  try {
   out = response.getOutputStream();
   // 禁止图像缓存。
   response.setHeader("Pragma", "no-cache");
   response.setHeader("Cache-Control", "no-cache");
   response.setDateHeader("Expires", 0);
   byte[] bytes = docService.downloadFileSingle(docId);
   if (bytes != null) {
    MagicMatch match = Magic.getMagicMatch(bytes);
    String mimeType = match.getMimeType();
    response.setContentType(mimeType);
    out.write(bytes);
   }
   out.flush();
  } catch (Exception e) {
   UnitedLogger.error(e);
  } finally {
   IOUtils.closeQuietly(out);
  }
 }

前端这里我引入了一个组件 js-file-download

npm install js-file-download --save

然后在Vue文件中添加进来

import fileDownload from "js-file-download";

 // 文档操作列对应事件
 async handleCommand(item, data) {
  switch (item.key) {
  case "download":
   var res = await this.download(data);
   return fileDownload(res, data.name);
  ...
  default:
  }
  // 刷新当前层级的列表
  const folder = this.getLastFolderPath();
  this.listClick(folder.folderId, folder.name);
 },
 // 下载
 async download(row) {
  if (this.isFolder(row.type)) {
  return FolderAPI.download(row.id);
  } else {
  return DocAPI.download(row.id);
  }
 },

docAPI js 注意需要设置responseType

/**
 * 下载单个文件
 * @param {*} id
 */
const download = (id) => {
 return request({
 url: _DataAPI.download + id,
 method: "GET",
 responseType: 'blob'
 });
};

这样即可成功下载。

关于vue.js的学习教程,请大家点击专题vue.js组件学习教程、Vue.js前端组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
vue-cli4.5.x快速搭建项目
May 30 Vue.js
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
vue特效之翻牌动画
Apr 20 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
vue+iview实现文件上传
Nov 17 #Vue.js
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 #Vue.js
vue+iview实现分页及查询功能
Nov 17 #Vue.js
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 #Vue.js
vue+iview分页组件的封装
Nov 17 #Vue.js
在vue中通过render函数给子组件设置ref操作
Nov 17 #Vue.js
vue+vant实现购物车全选和反选功能
Nov 17 #Vue.js
You might like
PHP 实现的将图片转换为TXT
2015/10/21 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
学习jQuey中的return false
2015/12/18 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
深入理解python对json的操作总结
2017/01/05 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
介绍一下gcc特性
2012/01/20 面试题
新学期家长寄语
2014/01/19 职场文书
考试诚信承诺书
2014/05/23 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
设置IIS Express并发数
2022/07/07 Servers
全网非常详细的pytest配置文件
2022/07/15 Python