2017-04-18 55 views
0

我正在嘗試爲不同的API編寫一個封裝器API,它以文件名作爲輸入並下載文件。不同的下載API的節點封裝器API

原始API是 https://test.com/?filename=abc.pdf

我想寫這個上面API的包裝,但似乎並不奏效,它只是打印一些數據我不能閱讀,但不列入發送文件。

var options = { 
    "method": "GET", 
    "hostname": test.com, 
    "port": 443, 
    "path": "/?filename=" +fileName, 
    "rejectUnauthorized": false, 
    } 

apiHelper.makeRequest(https, options, false, function(responseObject){ 
    if(responseObject.error){ 
     downloadBackupCallback(null, responseObject.error); 
    } 
    else{ 
     downloadBackupCallback(responseObject.data, null); 
    } 
    }) 

任何人都可以幫我在這裏。

回答

0

這聽起來像是你逐字逐句通過API響應的正文,但沒有設置正確的請求標題。

從瀏覽器訪問您的包裝腳本時,這將導致嘗試呈現請求的響應,就好像它是HTML一樣。當這發生在PDF文件中時,它看起來很像垃圾。

確保您在發送迴應時設置正確的HTTP標頭,並且如果可能,請從您打包的API提供的標頭中獲取這些標頭。

我建議你至少需要Content-TypeContent-Disposition。理想情況下,使用基於流的解決方案傳遞響應,以便在文件特別大時不會在本地緩存大量數據。

+0

如果可能的話,請你參考我的例子鏈接。同時我也在嘗試你的建議。 – undefined

+0

一個什麼樣的例子?通過閱讀[express docs](http://expressjs.com/en/4x/api.html#res.methods),可能會找到我提議的解決方案的任何特定元素的示例。我發現或生成整個事物的一個例子將有效地爲你做你的功課......我確實發現'sendFile()'需要在磁盤上有一個文件發送,所以我將刪除我的答案的一部分,因爲通過直接發送響應會更加優化。 – Benjamin