Emberjs 通过 axios 下载文件的方法

 更新时间:2019年09月03日 12:58:21   作者:法研鲁迅  
这篇文章主要介绍了Emberjs 通过 axios 下载文件的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

摘要: 目前项目中需要与后端合作,通过发送 GET 请求,后端返回文件流,前端进行文件的下载。

使用到的技术有:

  1. Emberjs
  2. axios

思路

接到这个需求的话,想着使用创建 a 链接,然后模拟点击 a 链接来完成下载,但是情况不是这样的。后端有多于一个的下载接口,首先是生成下载文件的接口, 这个接口主要是返回 需要下载的文件的 name 以及相应的接口地址。而下载的文件可能不止一个,同时,对文件接口地址发送 GET 请求,会返回文件流,但是我们需要的是 CSV 格式的文件,所以想到通过 axios 来实现这个需求。

具体做法

既然方向确定了,那就是去做了。

在项目中安装插件/导入 axios

现在 Emberjs 封装好的 axios 插件 - ember-axios ,使用 ember install axios 。这个插件没有文档,所以只能看源码,还好源码比较简单,就是简单的将 axios 的一些方法封装成一个 service 内的方法。

在项目文件中引入 axios

安装后在 Emberjs 项目中将此 service 引入近来

import { inject as service } from '@ember/service';

export default Controller.extend({
 // ...
 axios: service()
 // ...
});

这样即可使用这个插件中封装的一些 axios 的方法。

使用

之前也说过当前项目需要先发送一个请求,请求文件的接口地址。返回的值的格式为:

{
 "fileNames":[
  "filename=downloadFile1.csv",
  "filename=downloadFile2.csv"
 ],
 "status":"ok"
}

可以看到,如我们所想的那样,返回的并不一定是单个文件的地址,所以我们在接收到这个数据后:

import { isEmpty } from '@ember/utils';
import { all, reject } from 'rsvp';
//...
.then(data=> {
 if (data.status !== 'ok' || isEmpty(data.fileNames)) {
  return reject();
 }
 return all(data.fileNames.map(ele => {
  return axios.axios({
   url: `${ele}`,
   method: 'get',
   responseType: 'blob'
  });
 }));
});

在等待上面的请求发送成功之后,我们看看这段代码的意思。最上面的两个 import 是引入的一些 Emberjs 中封装的一些通用方法以及 promies 方法.在 then 之内的代码,先是验证是否返回成功。然后对数据进行遍历,并发送 axios 封装的 get 请求。 其中 axios.axios() ember-axios 封装的 axios.create(this.config()) 源码地址 ,同时注意的是 config 对象中 responseType 填写的是 blob ,这是保证文件能够下载成功的基础。

请求发送成功之后,我们需要对返回的数据进行处理,也就是:

.then(data => {
 data.forEach((res, index) => {
  const content = res.data,
   blob = new Blob([content], { type: 'text/csv' }),
   fileName = fileNames[index];

  if ('download' in document.createElement('a')) { // 非IE下载
   const elink = document.createElement('a');

   elink.download = fileName;
   elink.style.display = 'none';
   elink.href = URL.createObjectURL(blob);
   document.body.appendChild(elink);
   elink.click();
   URL.revokeObjectURL(elink.href); // 释放URL 对象
   document.body.removeChild(elink);
  } else { // IE10+下载
   navigator.msSaveBlob(blob, fileName);
  }
 });
}).catch(() => {
});

这段代码需要注意的是我们 new Blob() 接收的是 res.data 这个需要特别注意。另外就是此方法的第二个参数接收的 {type: 'text/csv'} ,因为次项目下载的是 csv 文件格式,其他的可以参考 MIME . 其他的就是创建一个 display:none 的 a 标签,并触发点击事件。这时候浏览器就会进行下载。

总结

这算是在 Embjerjs 中进行下载流文件的一次船新尝试。

以上所述是小编给大家介绍的Emberjs 通过 axios 下载文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • 微信小程序实现左侧导航栏

    微信小程序实现左侧导航栏

    这篇文章主要为大家详细介绍了微信小程序实现左侧导航栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • js中的循环方式及各种遍历的方法

    js中的循环方式及各种遍历的方法

    本文主要介绍了js中的循环方式及各种遍历的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • js操作XML文件的实现方法兼容IE与FireFox

    js操作XML文件的实现方法兼容IE与FireFox

    下面小编就为大家带来一篇js操作XML文件的实现方法兼容IE与FireFox。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • ECharts设置x轴刻度间隔的2种解决方法

    ECharts设置x轴刻度间隔的2种解决方法

    在初步接触Echarts时,经常遇到设置x轴刻度间隔的问题,这篇文章主要给大家介绍了关于ECharts设置x轴刻度间隔的2种解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法

    使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法

    今天工作中遇到个小问题,情况如下,当我在后台页面中设置Checkbox的Enable的值为false时,我在前端页面中使用脚本(chk.disabled = false),无法改变disabled的值为false,下面看看小编是怎么解决此问题的,需要的朋友一起了解了解吧
    2015-09-09
  • 鼠标划过实现延迟加载并隐藏层的js代码

    鼠标划过实现延迟加载并隐藏层的js代码

    鼠标划过延迟加载隐藏层的效果,想必大家都有见到过吧,在本文将为大家详细介绍下使用js是如何实现的,感兴趣的朋友可以参考下
    2013-10-10
  • JS模拟简易滚动条效果代码(附demo源码)

    JS模拟简易滚动条效果代码(附demo源码)

    这篇文章主要介绍了JS模拟简易滚动条效果代码,可模拟出滚动条拖动显示的效果,涉及JavaScript鼠标事件的响应及页面元素运算的相关技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
    2016-04-04
  • Javascript图像处理—虚拟边缘介绍及使用方法

    Javascript图像处理—虚拟边缘介绍及使用方法

    虚拟边缘就是按照一定映射关系,给图像添加边缘那么虚拟边缘有什么用呢?接下来详细介绍,需要了解的朋友可以参考下
    2012-12-12
  • js string 转 int 注意的问题小结

    js string 转 int 注意的问题小结

    Javascript将string类型转换int类型的过程中总会出现不如意的问题,下面为大家介绍下js string转int的一些注意的问题,感兴趣的朋友可以参考下
    2013-08-08
  • 微信小程序实现滑动翻页效果(完整代码)

    微信小程序实现滑动翻页效果(完整代码)

    这篇文章主要介绍了微信小程序实现滑动翻页效果,本文通过效果图展示实例代码讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12

最新评论