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 $attrs & inheritAttr实现button禁用效果案例
Dec 07 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
详解vue身份认证管理和租户管理
May 25 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 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与ASP
2006/10/09 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php实现webservice实例
2014/11/06 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
Python常见异常分类与处理方法
2017/06/04 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
TensorFlow的权值更新方法
2018/06/14 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
Python字符串格式化输出代码实例
2019/11/22 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
商场活动策划方案
2014/01/24 职场文书
小区门卫值班制度
2014/01/24 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
合作投资意向书
2014/04/01 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
python 离散点图画法的实现
2022/04/01 Python