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中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
Vue组件简易模拟实现购物车
Dec 21 Vue.js
vue绑定class的三种方法
Dec 24 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
如何封装Vue Element的table表格组件
Feb 06 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 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利用COM对象访问SQLServer、Access
2006/10/09 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
php创建sprite
2014/02/11 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
jQuery.form.js的使用详解
2017/06/14 jQuery
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
环保建议书
2014/03/12 职场文书
企业法人代表证明书
2014/09/27 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
2015年工商所工作总结
2015/05/21 职场文书