2017-10-05 47 views
1

我有一個API端點,它在一個PUT上提供一個PDF,Content-Type "application/pdf"(你可能會問「爲什麼PUT而不是GET?」,答案是「它很複雜,我無法改變它「)。來自PUT的PDF通過Blob URI

我想(客戶端)請求PDF並在window.open()調用中顯示結果(即在新窗口中顯示PDF)。以前我使用的數據URI來做到這一點,即:

window.open('data:application/pdf,<the data payload from the response>'); 

,但在Chrome 60此不再起作用(你不能在window.open使用數據URI,見https://bugs.chromium.org/p/chromium/issues/detail?id=751135)。

我現在已經改變了客戶端代碼做同樣的端點的fetch(),從響應創建BLOB,調用URL.createObjectURL()的BLOB得到一個網址,該網址傳遞給window.open()通話。即我有類似:

fetch('http://somedomain.com/rest/getMyPdf', { 
    method: 'PUT', 
    ... some headers & the body ... 
}).then(function(response) { 
    return response.blob(); 
}).then(function(blob) { 
    window.open(URL.createObjectURL(blob)); 
}); 

這在Firefox(我得到了一個新的窗口中PDF),但在Chrome,你剛纔看到的PDF內容(即%PDF-1.3.....)的原始ASCII。

我猜這是某種內容類型的問題,即如果我可以在url上設置內容類型,那麼Chrome會將響應解釋爲PDF。有關如何做到這一點的任何建議?

+0

由於創建BLOB!是的,它做到了(不需要'Uint8Array',只是'arrayBuffer'的原始結果)。想要補充和添加爲答案,我會接受它? –

回答