PWA: как сохранить PDF-файл в локальном хранилище или на локальном устройстве с помощью Javascript / HTML 5?

Я настраиваю прогрессивное веб-приложение с помощью PWA Builder. Мне нужно загрузить pdf, как только я загружаю прогрессивное веб-приложение на локальное устройство после отключения Интернета, чем я проверяю еще раз, щелкните ссылку pdf для загрузки. Я пробовал, но файл PDF не загружается. Пожалуйста, предложите.

Скачать файл без интернета? если он не размещен локально на устройстве или в сети, вы просите волшебства?

Anuga 28.12.2018 10:57

Я не знаю pwabuilder, но какую установку ServiceWorker вы выбрали? Похоже, вам нужна «сеть с первым кэшированием», чтобы все ваши файлы можно было кэшировать, даже если они никогда не посещались. Но «Автономная копия страниц» должна была кэшировать ваш файл, если вы действительно загрузили его перед отключением. Другие, не уверен, что «Автономная страница» не будет, кроме случаев, когда вы включили файл pdf как dataURI внутри offline.html. В любом случае, не могли бы вы показать фактический код, который вы запускаете в ServiceWorker, и как делается исходный запрос к этому pdf-файлу.

Kaiido 28.12.2018 12:10

Сервисы получают из копии pwabuilder.com/serviceworker( Не в сети со страницей Backup offline) ---------------------------------------- -------------------- ‌ -------------------- ‌ ------ -------------- ‌ - Используется в файле "pwabuilder-sw.js": - - var precacheFiles = ['index.html', 'contact.html', 'about .html ',' pdf / dummy.pdf ',' img / портфолио / cake.png ',' videos / small-test.mp4 '];

Prem Kumar 28.12.2018 16:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
2 716
1

Ответы 1

Прежде всего, я думаю, что для того, чтобы скачать PDF-файл, у вас должно быть подключение к Интернету. Затем преобразуйте его в base64 и сохраните в localStorage. Как только пользователь снова откроет ваше веб-приложение, проверьте, открывает ли он тот же PDF-файл, что и мы, и покажите его из localStorage.

Обновлено: я не думаю, что вы не могли кешировать в сервис-воркере. Это только для предопределенных данных.

Есть еще два варианта: - websql - indexsql - pouchsql

https://www.sitepoint.com/offline-web-apps-service-workers-pouchdb/

Никогда не храните двоичные файлы в localStorage. Этот API не предназначен для этого. Если вы действительно хотите хранить двоичные файлы, используйте IndexedDB. Теперь OP создает PWA, то есть они используют ServiceWorkers и имеют доступ к кешу.

Kaiido 28.12.2018 11:57

Я не сказал хранить двоичный файл. Я сказал хранить строку base64.

PPShein 28.12.2018 12:45

Получите эту строку base64, чтобы преобразовать PDF в отображение.

PPShein 28.12.2018 13:07

... Вы этого не понимаете. localStorage API предназначен для хранения небольшого количества данных (например, json) и обычно ограничен максимум 10 МБ для всего домена. Храните всего несколько больших PDF-файлов, и вы облажались. Не только это, но и localStorage фактически извлекается синхронно (т.е. блокируется отрисовка) каждый раз, когда ваши пользователи загружают вашу страницу. Все это повторяю: никогда не используйте localStorage для хранения двоичных файлов. Вместо этого используйте IndexedDB, который может хранить значительно больше данных, может хранить двоичные данные как есть (нет необходимости в кодировке base64 на 34% больше), является асинхронным и загружает ресурс только по запросу.

Kaiido 28.12.2018 14:02

И еще раз. Речь идет о реализации прогрессивного веб-приложения, имеющего доступ к ServiceWorkers и кешу. то есть ServiceWorker должен кэшировать свои ресурсы.

Kaiido 28.12.2018 14:03

Ах, я это пропустил.

PPShein 28.12.2018 14:44

Другие вопросы по теме