鍍金池/ 問答/HTML/ JS通過get獲取到從后臺返回的文件流(打包的壓縮文件),請問如何使用JS下載?

JS通過get獲取到從后臺返回的文件流(打包的壓縮文件),請問如何使用JS下載?

代碼如下

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "{#$apiHost#}/aw/export?brand_ids="+brand_ids,
  "method": "GET",
  "headers": {"token": "5f963175cc75613398e25ce2e5da56d7","os": "1"}
}
$.ajax(settings).done(function (data) {
    返回的data為文件流(壓縮包),請問這里如何進行另存為的下載呢?
});
回答
編輯回答
巫婆

圖片描述

后臺返回的是這種,用location.href的方法無法下載,是要驗證權限的,如果是不需要驗證權限,那直接用這個location方法可以

現在就是不太清楚如何處理這個返回的文件流

2017年6月12日 18:57
編輯回答
遺莣

window.location.href=‘后臺接口地址’

2017年3月15日 07:26
編輯回答
墨沫

可以試試用Blob轉成Url,然后用a標簽下載

https://juejin.im/post/5b078f...

2018年6月11日 11:59
編輯回答
薔薇花

把問題踢回后臺,為什么你這個鏈接不能直接下載
百度網盤什么的都是直接一個鏈接就能下載,哪有這么麻煩

2017年12月17日 05:14
編輯回答
膽怯

'use strict';

function xxxExportApi($http, $q) {
  return {
    download: function () {
      var deferred = $q.defer();
      var promise = deferred.promise;
      var url = 'api/xxx/download/xxx';
      $http({
        method: 'GET',
        url: url,
        responseType: 'arraybuffer'
      }).then(function (response) {
        var headers = response.headers();

        var filename = headers['content-disposition'].split(';')[1].split('=')[1];
        var contentType = headers['content-type'];

        var linkElement = document.createElement('a');
        try {
          var blob = new Blob([response.data], {
            type: contentType
          });
          var url = window.URL.createObjectURL(blob);

          linkElement.setAttribute('href', url);
          linkElement.setAttribute("download", filename);

          
          if (typeof (MouseEvent) == 'function') {
            var event = new MouseEvent("click", {
              "view": window,
              "bubbles": true,
              "cancelable": false
            });
            linkElement.dispatchEvent(event);
          } else if (navigator.appVersion.toString().indexOf('.NET') > 0) {????
            window.navigator.msSaveBlob(blob, filename);
          }
          
          deferred.resolve();
        } catch (err) {
          //console.log(ex);
          deferred.reject(err);
        }
      }).catch(function (err) {
        //console.log(err);
        deferred.reject(err);
      });
      return deferred.promise;
    }
  }
}

 

我們項目在angular1中的download解決方案,僅供參考

2018年9月23日 08:50