Альтернатива для атрибута "скачать" в Safari/iOS

У меня есть блоб, созданный с помощью base64, и мне нужно сделать эти данные загружаемыми в формате PDF.

Я создал этот фрагмент:

    var blob = new Blob([byte]);
    var link = document.createElement('a');

    link.href = window.URL.createObjectURL(blob);
    link.target = '_blank';
    var fileName = name + '.pdf';
    link.download = fileName;
    link.click();

Он работает во всех браузерах, кроме Safari Mobile на iOS.

Файл на самом деле загружается, но его имя "неизвестно", поэтому его нельзя открыть, так как расширение потеряно.

Проблема в том, что атрибут загрузки не поддерживается в этом браузере и IE.

Для IE есть много обходных путей, но я не нашел ни одного для safari/iOS.

Знаете ли вы, как я могу загрузить в этот браузер блоб, полученный с base64 (без участия XHR)?

Спасибо

Ответы

Ответ 1

Атрибут "target" в Safari переопределяет атрибут "download". В настоящее время, насколько мне известно, нет способа решить эту проблему. Поэтому я думаю, что вам придется ждать следующей версии Safari (13), которая выйдет через несколько месяцев.

Ответ 2

Мне нужно, чтобы эти данные загружались в формате pdf (...) в Safari iOS

КОРОТКИЙ ОТВЕТ: ты не можешь. Из-за этой ошибки невозможно скачать файл на сафари iOS


Альтернатива - открыть файл в браузере с соответствующим типом MIME, чтобы он мог показать его содержимое (и затем пользователь может загрузить его вручную, если это необходимо).

Убедитесь, что передали MIME-тип при создании BLOB-объектов. ссылка

var blob = new Blob([byte], {type: 'application/pdf'});

Наконец, я настоятельно рекомендую вам использовать FileSaver.js, который может обрабатывать большинство угловых случаев/поддержку нескольких браузеров для сохранения (или в этом случае открытия) файла в javascript.

Ответ 3

Вы можете использовать FileSaver.js для загрузки файлов/блобов. Его обновили для браузеров сафари. Вы можете проверить здесь для поддержки браузеров.

Ответ 4

Чтобы он работал на сафари, вам нужно заменить

link.href = window.URL.createObjectURL(blob);

с

link.href = blob;

Если вы хотите быть уверены, что он будет работать во всех браузерах, добавьте https://github.com/eligrey/FileSaver.js.

Ответ 5

По ссылке ниже: -

https://caniuse.com/#feat=download

Safari 13 Beta 3 выпущен, чтобы вы могли проверить, работает ли он или нет?

Вы можете скачать BLOB-объект, полученный с base64, используя функцию Atob.

Функция atob декодирует строку в кодировке base64 в новую строку с символом для каждого байта двоичных данных.

Вы можете сохранить блоб локально через FileSaver.js.

Вы также можете проверить здесь, что было бы полезно: - Как открыть Blob URL на Chrome iOS