HTML5 FileSystem API Android Chrome доступ к SD-карте

Я пытаюсь создать приложение HTML5, которое может получить доступ к большому количеству файлов. Поэтому я посмотрел на FileSystem API, чтобы иметь возможность читать файлы из локальной файловой системы.

Я сделал PoC, используя API-интерфейс PhoneGap, и все сработало, как и ожидалось, я смог получить аналогичные результаты, используя API-интерфейс FileSystem на рабочем столе Chrome...

Однако я столкнулся с серьезной проблемой: хотя я могу получить доступ к своей файловой системе на рабочем столе, я не могу получить доступ к SD-карте из Android Chrome. Я попытался использовать эту демонстрацию:

http://html5-demos.appspot.com/static/filesystem/filer.js/demos/index.html

Я могу выбирать файлы из своей локальной системы на рабочем столе: «Мои изображения» и т. д. Но я не могу сделать то же самое с Android Chrome.

Как я могу получить доступ к файловой системе /sdcard устройства в Android Chrome?


person Astronaut    schedule 18.03.2013    source источник


Ответы (1)


Из этой статьи о HTML5 Rocks:

Важно помнить, что эта файловая система изолирована, то есть одно веб-приложение не может получить доступ к файлам другого приложения. Это также означает, что вы не можете читать и записывать файлы в произвольную папку на жестком диске пользователя (например, «Мои рисунки», «Мои документы» и т. д.).

FileSystem API был разработан, чтобы позволить вашему приложению создавать файлы и управлять ими, которые будут сохраняться между использованиями вашего приложения. Его нельзя использовать для предоставления произвольных файлов из-за пределов песочницы.

Кроме того, File API можно использовать для чтения, но не для изменения файлов. от всей системы. Однако File API нельзя использовать для чтения произвольных файлов в системе. Его использование основано на HTML-теге <input type=file>, где пользователь должен явно ввести файл для чтения.

Вышеупомянутое относится к приложению, работающему в Android Chrome, так же, как и к настольному Chrome, поэтому вам не повезло, если пользователь не захочет использовать ввод для предоставления доступа к нужным вам файлам. Однако вы упомянули, что также пытались использовать PoC с помощью PhoneGap. API файлов PhoneGap, который в основном действует как оболочка вокруг Реализация HTML5 имеет некоторые тонкие отличия, в основном в том, что она разрешает доступ к произвольным файлам на SD-карте. При использовании вызова API window.requestFileSystem() ваш обратный вызов успеха будет иметь один аргумент, FileSystem, где свойство root является ссылкой на папку /sdcard. Это можно использовать для обхода вашей SD-карты и создания FileReaders и FileWriters в любом месте.

person MattDavis    schedule 18.03.2013
comment
Привет, Мэтт, я тоже прочитал эту статью и понял, что это песочница fs. Однако на рабочем столе я могу выбирать файлы из «Моих изображений», «Моих документов» и т. д. Вы можете попробовать это сами по ссылке, которую я разместил. В Android я не могу правильно выбрать каталоги, но я смог выбрать файлы. И PhoneGAP PoC, который я сделал, смог прочитать каталоги с SD-карты. Мне удалось создать DirectoryReader без особых проблем. Мне удалось воспроизвести этот PoC в Chrome Desktop с помощью FileSystem API, но я не могу сделать это с версией Android Chrome. это очень расстраивает - person Astronaut; 19.03.2013
comment
Понимаю. Еще немного пояснений: проблема в том, что вы вообще не можете выбрать каталоги на Android, или возникла проблема с DirectoryReader после выбора каталога? Кроме того, является ли демо, которое вы разместили, кодом, с которым вы проводите это тестирование на всех платформах? - person MattDavis; 20.03.2013
comment
Я вообще не могу выбирать каталоги в Android. Демонстрация одинакова на всех платформах. - person Astronaut; 20.03.2013
comment
Есть некоторые проблемы с File API в мобильном Chrome, я провел дополнительные исследования и нашел решение проблемы, создав репозиторий файлов и загрузив их в постоянную изолированную файловую систему. Пока это работает, нужно создать более сложные сценарии, чтобы убедиться, что это пригодная для использования система, но пока все хорошо. - person Astronaut; 25.04.2013