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项目实现主题切换的多种方法
Nov 26 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
前端性能优化建议
2020/09/17 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
聊聊python中的循环遍历
2020/09/07 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
九州传奇上机题
2014/07/10 面试题
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
年度考核自我鉴定
2013/11/09 职场文书
2014教师年度工作总结
2014/11/10 职场文书
成本会计岗位职责
2015/02/03 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android