Как расширение Chrome может сохранить много файлов в указанный пользователем каталог?
Я работаю над расширением Chrome, которое будет использоваться в качестве внутреннего инструмента. Его требуемое поведение:
- в качестве действия страницы включите значок адресной строки при просмотре определенных страниц интрасети.
- когда пользователь нажимает на значок, определите все файлы определенного типа носителя (скажем,.jpg) на странице, и
- молча сохраните их в каталог на локальном диске пользователя.
этот вопрос был задан раньше, но ответ тогда было "использовать NPAPI", и NPAPI теперь заброшен.
Итак, каков в настоящее время доступный способ достичь этого? Те, на которые я смотрел:
- The хром.Файловая система API - - - но это не сохраняет файлы в любом доступном пользователю месте. Вместо этого сохраненные файлы скрыты за запутанными именами в недокументированном каталоге. Пользователь требует, чтобы файлы хранились под своими оригинальными именами в доступном справочник.
атрибут загрузки HTML5, создав data: URL и программно щелкнув его. Это всплывает "сохранить как..."диалог для каждого файла, что недопустимо, когда на одной странице есть сто активов. Пользователь требует, чтобы файлы были загружены без дальнейшего взаимодействия за одним щелчком значка.- The Chrome Download API, но это доступно только в бета-версии и каналы разработчиков. Пользователь требует этого расширение работает с основным Chrome.
- использовать Native Messaging API создавая небольшой .exe, который просто сохраняет файл на диск, а затем передать .jpg как blob к нему. Это кажется очень громоздким, и я даже не уверен, как надежно передать большие капли бывшим таким образом.
есть ли другой подход, который я могу попробовать?
3 ответов:
вы провели довольно много исследований. Действительно, обычные веб-страницы не могут писать в файловую систему пользователя без каких-либо плагинов или расширений. Кроме того,HTML5 filesystem API только обеспечивает доступ к виртуальной файловой системе, как вы заметили.
однако, вы путаете
chrome.fileSystemAPI с API файловой системы HTML5. В отличие от API файловой системы HTML, ChromefileSystem(app) API can написать в файловую систему пользователя (например~/Documentsили%USERPROFILE%\Documents), указанный пользователем.этот API доступен только для Chrome приложения, а не расширения. Это не проблема, тем более что вы разрабатываете внутренний инструмент, потому что вы можете установить приложение и расширение, и использовать сообщение передает для связи между расширением (действие страницы) и приложением (доступ к файловой системе) (пример).
о
chrome.downloads: так как ваше расширение внутренний, вы, вероятно, можете заставить пользователей попасть на канал beta/dev, чтобы использовать этот API. Единственным ограничением этого API является то, что файлы будут сохранены в (подкаталоге) пользовательской папки Загрузки."правка":
chrome.downloadsAPI теперь доступен во всех каналах, включая стабильную ветку (начиная с Chrome 31).
Я боюсь, что вы сделали свою домашнюю работу, то есть вы посмотрели на все возможные альтернативы.
лучший способ достичь именно того, что вы хотите, было бы (как вы упомянули) с помощью поддержки родного приложения и общения через родные сообщения. Кстати, поскольку пропускная способность редко является проблемой в интрасетях, вам может быть проще передать URL-адреса ресурсов (например, изображений) и загрузить приложение и сохранить их.
(Да, это будет более громоздко, чем просто разработка расширение, но один должен делать то, что они должны делать, не так ли ?)с другой стороны, если вы готовы пожертвовать немного пользовательского опыта над простотой разработки, я предлагаю объединить HTML5 лакомства (которые позволяют создавать и загружать файл локально) с библиотекой JS zipping (например,JSZip), поэтому пользователь должен загрузить только один zip-файл (и только один раз запрашивается). Кстати, если пользователь желает, он может выбрать всегда загрузите файлы без запроса (но вы это уже знали).
используйте идею собственного приложения для обмена сообщениями.
родное приложение громоздко и больно писать, потому что документация плохая, и если вы не получите форматирование JSON точно правильно на обоих концах, вы ничего не увидите в консоли, потому что stdin и stdout принимаются.
но, вы будете счастливее, когда это будет сделано, потому что вы можете использовать стандартные инструменты (например, Проводник Windows, шестнадцатеричный редактор, TeamViewer...) для просмотра, перемещения и удаления файлов, а также в противном случае посмотреть, что такое продолжающийся. Файловая система Chrome sand-boxed работает, но, похоже, теперь она тупиковая (никакие другие браузеры не подобрали ее). Никто, вероятно, не будет разрабатывать сторонние инструменты для этого. Конечно, вам, вероятно, не нужны инструменты, когда все работает, но до тех пор отладка-это кошмар, потому что вам нужно написать код (и довольно много кода), чтобы отслеживать, какие файлы находятся в каких каталогах, версиях файлов, оставшемся дисковом пространстве...
Comments