我有一個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。有關如何做到這一點的任何建議?
由於創建BLOB!是的,它做到了(不需要'Uint8Array',只是'arrayBuffer'的原始結果)。想要補充和添加爲答案,我會接受它? –