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 router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
Vue实现简单计算器
Jan 20 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue Element-ui表格实现树形结构表格
Jun 07 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
关于vue-router-link选择样式设置
Apr 30 Vue.js
vue3不同环境下实现配置代理
May 25 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/03/04 星际争霸
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
JSONP之我见
2015/03/24 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
Python调用命令行进度条的方法
2015/05/05 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
python 判断网络连通的实现方法
2018/04/22 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
实习鉴定评语
2014/01/19 职场文书
模具专业自荐信
2014/05/29 职场文书
幼儿老师求职信
2014/06/30 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
个人廉政承诺书
2015/04/28 职场文书
入党团支部推荐意见
2015/06/02 职场文书
网吧管理制度范本
2015/08/05 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS