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 相关文章推荐
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
Vue详细的入门笔记
May 10 Vue.js
vue-element-admin项目导入和导出的实现
May 21 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
vue实现锚点定位功能
Jun 29 Vue.js
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
vue递归实现树形组件
Jul 15 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
重置版游戏视频
2020/04/09 魔兽争霸
php中全局变量global的使用演示代码
2011/05/18 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
jquery移动节点实例
2015/01/14 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
自主招生自荐信
2013/12/08 职场文书
高一生物教学反思
2014/01/17 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书