Альтернатива для атрибута "скачать" в 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