2017-06-02 73 views
1

我使用Filesaver.js嘗試從我的後端,這是Express(nodejs)下載文件。下載文件與Angular和Filesaver.js不工作

這是我的後端代碼來下載文件。它使用中間件來檢查認證信息。

res.download(url, function (err) { 
    if (err) { 
     console.log("Error: " + err); 
     res.status.send({ 
     message: "Can not download file" 
     }); 
    } 
}); 

這裏是我的服務的代碼:

downloadEventAttachment(attachmentUrl){ 

    let endPointUrl = this.auth.getServerHost(); 

    this.authHttp.get(endPointUrl + attachmentUrl) 
     .subscribe(res => { 
      var blob = new Blob([res], { type: res.headers.get('Content-Type') }); 
      saveAs(blob); 
     }) 
} 

的問題是,生成一個下載文件,但有錯誤。 如果我下載了一張圖片,說圖片無效。

enter image description here

如果我嘗試下載一個txt文件其有這樣的內容:

Response with status: 200 OK for URL: http://192.168.1.78:8081/calendar/download_eventattachment/728/file-1496421767591.txt 

如果我使用從郵遞員請求,則圖像以及顯示。

enter image description here

我做錯了什麼?

非常感謝

[更新1]

我添加的responseType和仍然沒有工作:

downloadEventAttachment(attachmentUrl){ 
     let endPointUrl = this.auth.getServerHost(); 

     let options = new RequestOptions({ responseType: ResponseContentType.Blob }); 

     this.authHttp.get(endPointUrl + attachmentUrl, options) 
      .subscribe(res => { 

       var blob = new Blob([res], { type: res.headers.get('Content-Type') }); 
       saveAs(blob); 
      }, 
      error => { 
       console.log(error); 
      }) 
    } 
+0

https://stackoverflow.com/questions/33242959/saving-png-files-with-filesaver-js –

+0

這並不能幫助我的朋友@AhmedMusallam –

+0

你必須設置響應內容類型...看到這裏http://talk-about-code.blogspot.de/2017/05/download-file-with-angular2-and.html?m=1 – Ludwig

回答

0

最後的作品就這個樣子:

downloadEventAttachment(attachmentUrl){ 
    let endPointUrl = this.auth.getServerHost(); 
    let options = new RequestOptions({ responseType: ResponseContentType.Blob }); 
    this.authHttp.get(endPointUrl + attachmentUrl, options) 
     .subscribe(res => { 
       var file = res.blob(); 
      }); 
      saveAs(file); 
     }, 
     error => { 
      console.log(error); 
     }) 
} 

我認爲舊的行:var blob = new Blob([res], { type: res.headers.get('Content-Type') });

重疊響應的內容。