2015-12-29 91 views
1

我已經編寫了以下服務以保存來自給定URL的文件。保存爲blob花費太長時間從給定的URL下載文件

(function() { 
    angular.module('SOME_APP') 
     .service("downloadService", downloadService); 

     function downloadService($http){ 

      var downloadFileFromUrl = downloadFileFromUrl; 

      function downloadFileFromUrl(url){ 

       if(!url.length){ 
        //TO-DO handle the error 
       } 

       else{ 
        //find the file name and extension, to save it as: 
        var fileName; 
        for(var i=url.length; i>=0; i--){ 
         if(url[i]=='/'){ 
          fileName=url.slice(i+1, url.length); 
          console.log(fileName); 
          break; 
         } 
        } 
        $http({ 
         url: url, 
         method: "GET", 
         responseType: 'arraybuffer' 
         }).success(function (data) { 
          var blob = new Blob([data], {type: '*/*'}); 
          saveAs(blob, fileName); 
         }).error(function (data) { 
          console.log(data); 
          //TO-DO error handling 
        }); 
       } 
      } 

      return { 
        downloadFileFromUrl : downloadFileFromUrl 
      } 
     } 
}()); 

當我調用服務,服務爲先下載文件,一旦下載完成,那麼它顯示在瀏覽器中下載(含100%進度)。我如何使它正常工作? (在瀏覽器中啓動下載,並逐漸顯示進度)

+1

爲什麼不設置計時器? –

+0

你不能同時擁有兩個。您無法下載本機瀏覽器並獲取進度通知。您需要設置一個常規的XmlHttpRequest並添加一個進度偵聽器,或者找到一種方法來操作'$ http'中的底層XHR對象以添加偵聽器。 –

+0

每次數據傳輸時都會保存它,這不是最好的下載方式。最好註冊傳入數據的事件並知道何時完成交易。如果你希望它是一個簡單的下載,你可以提供一個鏈接到一個標籤HTML並給它的下載屬性。這只是爲你下載它 –

回答

0

我的意圖是從給定的URL下載文件。我實現它使用HTML5錨標記下載屬性爲:

index.html中:

   <a id='downloadTag' href="" download hidden></a> 

而且在服務:

   document.getElementById("downloadTag").href=url; 
       document.getElementById("downloadTag").click(); 

這解決了我的問題。

相關問題