Я работаю над приложением Angular, и у меня есть следующий код для открытия содержимого блоба в браузере или его загрузки (включая обходной путь для Edge):
if (openFile) {
// Open blobs in new tab
window.open(URL.createObjectURL(myBlob), "_blank");
} else {
// Edge workaroud for downloading file
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(myBlob, file.name);
} else {
let fileURL = URL.createObjectURL(myBlob);
let a = document.createElement("a");
a.href = fileURL;
a.download = filenameFromHeader;
document.body.appendChild(a);
a.click();
URL.revokeObjectURL(fileURL);
}
}
Как вы можете видеть приложениеразрешить пользователям открывать большие двоичные объекты в новой вкладке браузера, а не загружать их, в зависимости от того, на какую кнопку они нажимают.
Это работает как чудо, все браузеры открывают и загружают (за исключением открытия больших двоичных объектов)в Edge, который заблокирован по соображениям безопасности).
Проблема в том, что у меня есть 2 среды Azure, и только в одной из них открытие файла работает всегда с каждым файлом PDF.В другой среде, с некоторыми файлами PDF, Chrome вместо вкладки открывает вкладку с двоичным содержимым PDF.
Здесь указаны Content-Disposition
и Content-Type
взаголовок ответа поступает из обеих сред Azure:
Content-Disposition: attachment; filename='myDocument.pdf'
Content-Type: application/octet-stream
Итак, поскольку приложение Angular одинаково, файлы PDF одинаковы, используемый браузер Chrome одинаков, что может быть не так с одним изсредах Azure, в которых с некоторыми файлами PDF соответствующий BLOB-объект отображается в виде текста вместо PDF?