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");
Другие вопросы по тегам