На это уже много раз отвечали в прошлом.Вот функция, которая обрабатывает загрузку BLOB-объектов.Я использую это в нескольких производственных системах.В число протестированных браузеров входят IE9 +, Edge, Chrome, Firefox:
async function showBlobInBrowser(blob, fileName) {
return new Promise((resolve, reject) => {
try {
if (navigator.msSaveOrOpenBlob) {
navigator.msSaveOrOpenBlob(blob, fileName);
resolve()
} else if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, fileName);
resolve()
} else {
const url = (window.URL || window.webkitURL).createObjectURL(blob),
a = document.createElement("a")
a.setAttribute("href", url)
a.setAttribute("download", fileName)
a.style.display = "none"
document.body.appendChild(a)
a.click()
setTimeout(function () {
a.remove()
window.URL.revokeObjectURL(url)
resolve()
}, 0)
}
} catch(ex) {
reject(ex)
}
})
}