FileSaver.js не загружает PDF с Safari
У меня проблема с FileSaver.js, я не могу загрузить PDF (или PNG или файл Excel) в Safari, но он работает в любом другом веб-браузере. В консоли появляется сообщение об ошибке: "Не удалось загрузить ресурс: сетевое соединение потеряно".
Что странно, этот PDF-файл не загружается, если Tomcat его обслуживает, но если файл обслуживает Apache, загрузка работает нормально.
Вот пример кода (я работаю с Angular 1.5.8):
$http.get(url, { responseType: 'arraybuffer' })
.success(function (response) {
var file = new Blob([response], {type: 'application/pdf'});
fileSaverService(file, filename);
});
2 ответа
У меня была похожая проблема, и я использовал axios, чтобы позвонить (это был почтовый запрос в моем случае) в службу загрузки. Код ниже работал для меня:
axios.post(url, downloadRequest, {responseType:'blob'})
.then(response =>{
var filename = 'example.zip';
var blob = new Blob([response.data], {type:"application/octet-stream"});
saveAs(blob , filename);
})
.catch(error => {
console.error(error);
});
У меня была проблема с base64,PDF не смог открыть. Это я решил преобразовать base64 в bin, а затем преобразовать в Uint8Array(byteNumbers). Проверьте ниже фрагмент, который сработал для меня.
const byteCharacters = atob(b64);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: "application/pdf"});
saveAs(blob, "sample.pdf");