Альтернатива для атрибута «скачать» в Safari / iOS - PullRequest
17 голосов
/ 19 апреля 2019

У меня есть большой двоичный объект, созданный с помощью 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) в этом браузере?

Спасибо

Ответы [ 3 ]

1 голос
/ 22 июля 2019

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

КРАТКИЙ ОТВЕТ: вы не можете.Из-за этой ошибки невозможно загрузить файл в Safari. IOS


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

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

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

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

1 голос
/ 22 июля 2019

По приведенной ниже ссылке: -

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

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

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

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

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

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

0 голосов
/ 18 июля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...