2017-06-14 78 views
2

我爲我的應用程序使用node.js和angular.js,並試圖通過瀏覽器使用Blob和fileSaver.js下載文件。有沒有辦法使用angular filesaver下載任何類型的文件?

我在我的應用程序的其他部分使用這些來下載文本文件和PDF文件,指定創建Blob對象時的正確類型沒有任何問題,但在當前部分中,我需要支持任何類型的文件,而我不知道是否有可能。

例如,我嘗試了下載一個圖像文件,有沒有type:image/png,結果是一個損壞的圖像 - 在文本編輯器中檢查它並將其與原始文件進行比較,結果顯示很多字節已被更改。

以下是代碼片段我用:

服務器

fs.readFile(/* snipped file path */, function(err, data){ 
    if(err){ 
     /* handle error */ 
    } 
    else{ 
     res.send(data); 
    } 
}); 

客戶

$http.get(/* endPoint URL */) 
    .success(function(result){ 
     var data = new Blob([result], {type: 'image/png'}); 
     FileSaver.saveAs(data, filename); 
    }); 

幾個問題:

  1. 我需要爲Blob指定類型嗎?如果是這樣,我是否也需要在服務器上指定它(確定它是一種痛苦)?我不能在兩端跳過它嗎?
  2. 什麼導致圖像測試導致文件損壞?我是否缺少一些content-type標題或什麼?

回答

0

嘗試增加{contentType: 'arraybuffer'}到您的GET請求,並從斑點定義中刪除類型,就像這樣:

$http.get(/* endPoint URL */, {contentType: 'arraybuffer'}) 
    .success(function(result){ 
     var data = new Blob([result]); 
     FileSaver.saveAs(data, filename); 
    }); 

編輯:從一滴刪除冗餘的類型定義)

+1

謝謝!它適用於我嘗試過的所有類型的文件。它也不需要在創建Blob對象時指定類型。 – kfirz

相關問題