2017-05-24 162 views
3

我打電話的API下載使用API​​獲取從服務器Excel文件,但它並沒有強制瀏覽器下載,下面是我的頭回應:提取API來強制下載文件

HTTP/1.1 200 OK Content-Length: 168667 
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
Server: Microsoft-IIS/8.5 
Content-Disposition: attachment; filename=test.xlsx 
Access-Control-Allow-Origin: http://localhost:9000 
Access-Control-Allow-Credentials: true 
Access-Control-Request-Method: POST,GET,PUT,DELETE,OPTIONS 
Access-Control-Allow-Headers: X-Requested-With,Accept,Content-Type,Origin 
Persistent-Auth: true 
X-Powered-By: ASP.NET 
Date: Wed, 24 May 2017 20:18:04 GMT 

下面我的代碼,我使用調用API:

this.httpClient.fetch(url, { 
    method: 'POST', 
    body: JSON.stringify(object), 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    } 
}) 
+0

您可能想要使用https://stackoverflow.com/posts/44168090/edit來更新/編輯您的問題,以添加您正在使用的代碼片段來嘗試下載文件 – sideshowbarker

+0

你是怎麼「打電話給API「? – Tom

+0

this.httpClient.fetch(URL,{ \t方法: 'POST', \t體:JSON.stringify(對象), \t標頭:{ \t \t '接受': '應用/ JSON', \t \t 'Content-Type':'application/json' \t} }) –

回答

3

瀏覽器將不會顯示下載(顯示另存爲...對話框等)通常互動,只有當你瀏覽到該資源。這是比較容易,以顯示與一個例子的區別:

  1. window.location='http://mycompany.com/'
  2. 經由XHR負載http://mycompany.com/ /提取在背景中。

1.,瀏覽器將加載頁面顯示其內容。在2.中,瀏覽器將加載原始數據並將其返回給您,但您必須自己顯示它。

你必須做一些類似的文件。你有原始數據,但你必須自己「展示」它。要做到這一點,你需要爲你下載的文件創建的ObjectURL並導航到它:

this.httpClient 
    .fetch(url, {method, body, headers}) 
    .then(response => response.blob()) 
    .then(blob => URL.createObjectURL(blob)) 
    .then(url => { 
     window.open(url, '_blank'); 
     URL.revokeObjectURL(url); 
    }); 

這將提取的響應,把它讀成一個blob,創建的ObjectURL,打開它(在新標籤),然後撤消該URL。

更多關於對象的網址: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

0

沒有可以解決這個問題,一些方便的圖書館在IE瀏覽器。 要解決我使用CSV /文本下載時遇到的問題,我使用了FileSaver

實施例:

var saveAs = require('file-saver'); 

fetch('/download/urf/file', { 
    headers: { 
    'Content-Type': 'application/pdf' 
    }, 
    responseType: 'blob' 
}).then(response => response.blob()) 
    .then(blob => saveAs(blob, 'test.csv')); 

還有download.js LIB如this question解釋這裏。