91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Emberjs中通過 axios下載文件

發布時間:2021-05-21 16:52:45 來源:億速云 閱讀:142 作者:Leah 欄目:web開發

這期內容當中小編將會給大家帶來有關如何在Emberjs中通過 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 標簽,并觸發點擊事件。這時候瀏覽器就會進行下載。

上述就是小編為大家分享的如何在Emberjs中通過 axios下載文件了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

资溪县| 泸州市| 涟源市| 泽州县| 广昌县| 疏勒县| 祁东县| 南昌市| 富宁县| 渝中区| 靖西县| 枞阳县| 大渡口区| 武清区| 射洪县| 稷山县| 珠海市| 高台县| 太原市| 海安县| 芦山县| 阿坝县| 临武县| 纳雍县| 秭归县| 益阳市| 建德市| 齐齐哈尔市| 屏东县| 普安县| 汶上县| 渭源县| 桐柏县| 长阳| 龙泉市| 新平| 商丘市| 鹿泉市| 广昌县| 同德县| 安国市|