2017-03-16 159 views
0

我有一個Azure中的Excel電子表格,我使用SAS公開,下載後它說該文件已損壞。下面是代碼保存和URI使用FileSaver.js從Azure Blob存儲下載損壞的文件

var result : any= {}; 
result.fileUri = 
    "https://mystorageaccount.blob.core.windows.net/market-files/33b55b3c-8997-405c-af31-33f6f3e79daf?sv=2016-05-31&sr=b&sig=5Xw%2F4UPcdXbXrxd4mIcZUPQX%2FZzVZfDTQoTfr5V6NTY%3D&st=2017-03-16T18%3A00%3A12Z&se=2017-03-17T18%3A05%3A12Z&sp=rw"; 

this.http.get(result.fileUri).subscribe(
      (response: any) => { 
           var mediaType = 'application/octet-stream'; 
           var blob = new Blob([response._body], { type: mediaType }); 
           var filename = 'test.xlsx'; 
           saveAs(blob, filename); 
      }); 

文件下載使用正確的文件名,但是當我打開它,我得到在Excel中稱該文件中的錯誤已損壞。

回答

0

我不是Angular2的專家,但我認爲響應主體應該轉換爲arraybuffer。關於如何處理它,你可以閱讀SO上的this post

以下是使用純Javascript和FileSaver.js從Azure Blob存儲下載文件的示例。

var fileUri = "https://storageaccount.blob.core.windows.net/market-files/<bolbNameAndSAS>"; 
var oReq = new XMLHttpRequest(); 
oReq.open("GET", fileUri, true); 
oReq.responseType = "arraybuffer"; 

oReq.onload = function(oEvent) { 
    var blob = new Blob([oReq.response], {type: "application/octet-stream"}); 
    var filename = 'test.xlsx'; 
    saveAs(blob, filename); 
}; 

oReq.send();