1

我使用的春季會議上產生的,以保持通信的x-auth-token當訪問受保護的靜態文件,這是罰款AJAX requests.I有一個問題,雖然,我是當前文件被ajax提取。使用X-auth的令牌

這些文件是用戶上傳的內容,PDF文件,HTML CSS和字體,基本的東西,瀏覽器可以渲染,所以要實現AJAX力下載按鈕是不是一種選擇(儘管也許有辦法做到這一點,以查看它們我沒有想到)。目前它們只是通過<a href鏈接被瀏覽器GET請求,因此不包含標題。

我正在使用AngularJS。解決此問題的最佳方法是什麼?

回答

0

我知道這個問題已經過去幾個月了,但是當我第一次使用Spring Session的時候,我遇到了AngularJS的這個問題。這有點冒險,但它基本上使用AngularJS的HTTP來檢索文檔並將其保存在瀏覽器的BLOB中。然後,通過指向BLOB的鏈接創建隱藏的<a>標記,並以編程方式點擊鏈接。我有一個名爲「saveBlob」的AngularJS服務,處理這樣的:

app.service('saveBlob', ['$http', function ($http) { 
return { 
    download: function(url, fileName) { 
     $http.get(url, { responseType: 'arraybuffer' }).then(function(response) { 
      var blob = new Blob(
        [ response.data ], 
        { type: response.headers('Content-Type') } 
       ); 
      var objUrl = window.URL.createObjectURL(blob); 
      var a = document.createElement("a"); 
      document.body.appendChild(a); 
      a.style = "display: none"; 
      a.href = objUrl; 
      if (fileName) { 
       a.download = fileName; 
      } 
      else { 
       var regex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/g; 
       var match = regex.exec(response.headers('Content-Disposition')); 
       var fn = match[1]; 
       a.download = fn.substring(1, fn.length - 1); 
      } 
      a.click(); 
      window.URL.revokeObjectURL(url); 
     }); 
    } 
} 
}]); 

的「saveBlob」服務,然後通過一個名爲「httpHref」指令稱爲:

app.directive('httpHref', ['$http', 'saveBlob', function ($http, saveBlob) { 
return { 
    link: function ($scope, elem, attrs) { 
     function revokeObjectURL() { 
      if ($scope.objectURL) { 
       URL.revokeObjectURL($scope.objectURL); 
      } 
     } 

     $scope.$watch('objectURL', function (objectURL) { 
      elem.attr('href', objectURL); 
     }); 

     $scope.$on('$destroy', function() { 
      revokeObjectURL(); 
     }); 

     attrs.$observe('httpHref', function (url) { 
      elem[0].onclick = function() { 
       saveBlob.download(url); 
      }; 
     }); 
    } 
}; 
}]); 

我改編自This GitHub Repository這個代碼(這是根據麻省理工學院許可證授權的),所以非常感謝該項目的貢獻者幫助我完成這一任務!

+0

可能對某人有用,我最終遷移到Aurelia,但我確信我可以找到一種方法將其轉換爲aurelia/fetch api – xenoterracide