28 KiB
cordova-plugin-file
Этот плагин реализует API файла, позволяя доступ на чтение и запись в файлы, находящиеся на устройстве.
Этот плагин основан на нескольких спецификации, в том числе: HTML5 API файла http://www.w3.org/TR/FileAPI/
(Ныне несуществующей) каталоги и систему расширений Последнее: http://www.w3.org/TR/2012/WD-file-system-api-20120417/ , хотя большая часть кода, плагин был написан, когда ранее спец был текущим: http://www.w3.org/TR/2011/WD-file-system-api-20110419/
Он также реализует уничтожал spec: http://dev.w3.org/2009/dap/file-system/file-writer.html
Для использования, пожалуйста, обратитесь к HTML5 скалы отличные файловой системы статьи.
Обзор других вариантов хранения найти Cordova хранения руководства.
Установка
cordova plugin add cordova-plugin-file
Поддерживаемые платформы
-
Amazon Fire OS
-
Android
-
BlackBerry 10
-
Firefox OS
-
iOS
-
Windows Phone 7 и 8 *
-
Windows 8 *
-
Эти платформы не поддерживают
FileReader.readAsArrayBuffer
, ниFileWriter.write(blob)
.
Где хранить файлы
По состоянию на v1.2.0 приведены URL-адреса для важных файлов в системные каталоги. Каждый URL-адрес в виде *file:///path/to/spot/*и может быть преобразован в DirectoryEntry
с помощьюwindow.resolveLocalFileSystemURL()
.
-
cordova.file.applicationDirectory
-Каталог только для чтения, где установлено приложение. (iOS, Android, BlackBerry 10) -
cordova.file.applicationStorageDirectory
-Корневой каталог приложения в песочнице; на iOS это место только для чтения (но определенных подкаталогов [как/Documents
], чтения записи). Все данные, содержащиеся в частных в приложение. ( iOS, Android, BlackBerry 10) -
cordova.file.dataDirectory
-Хранения стойкие и частных данных в приложения в песочнице с использованием внутренней памяти (на Android, если необходимо использовать внешнюю память, использовать.externalDataDirectory
). На iOS, этот каталог не синхронизируется с iCloud (использование.syncedDataDirectory
). (iOS, Android, BlackBerry 10) -
cordova.file.cacheDirectory
-Каталог для кэшированных данных файлов или все файлы, которые ваше приложение может повторно создать легко. ОС может удалить эти файлы, когда устройства хватает на хранение, тем не менее, приложения не должны опираться на OS, чтобы удалить файлы здесь. (iOS, Android, BlackBerry 10) -
cordova.file.externalApplicationStorageDirectory
-Пространство приложения на внешнем хранилище. (Android) -
cordova.file.externalDataDirectory
-Куда положить файлы данных конкретного приложения на внешнем хранилище. (Android) -
cordova.file.externalCacheDirectory
-Применение кэш на внешние накопители. (Android) -
cordova.file.externalRootDirectory
-Корень внешние накопители (SD карта). (Android, BlackBerry 10) -
cordova.file.tempDirectory
-Временный каталог, что ОС можно снять на будет. Не следует полагаться на OS, чтобы очистить этот каталог; Ваше приложение всегда следует удалять файлы в соответствующих случаях. (iOS) -
cordova.file.syncedDataDirectory
-Содержит файлы приложения, которые должны быть синхронизированы (например, к iCloud). (iOS) -
cordova.file.documentsDirectory
-Файлы для приложения, но это являются значимыми для других приложений (например, файлы Office). (iOS) -
cordova.file.sharedDirectory
-Файлы глобально доступной для всех приложений (BlackBerry 10)
Макеты файловой системы
Хотя технически деталь реализации, она может быть очень полезно знать как cordova.file.*
карта свойства физические пути на реальном устройстве.
iOS расположения файловой системы
Путь к устройству | Cordova.File.* |
iosExtraFileSystems |
r/w? | стойкие? | Очищает ОС | Синхронизация | частные |
---|---|---|---|---|---|---|---|
/ var/мобильного/применения/< UUID > / |
applicationStorageDirectory | - | r | Н/Д | Н/Д | Н/Д | Да |
appname.app/ |
applicationDirectory | расслоение | r | Н/Д | Н/Д | Н/Д | Да |
www/ |
- | - | r | Н/Д | Н/Д | Н/Д | Да |
Documents/ |
documentsDirectory | документы | r/w | Да | Нет | Да | Да |
NoCloud/ |
- | документы nosync | r/w | Да | Нет | Нет | Да |
Library |
- | Библиотека | r/w | Да | Нет | Да? | Да |
NoCloud/ |
dataDirectory | Библиотека nosync | r/w | Да | Нет | Нет | Да |
Cloud/ |
syncedDataDirectory | - | r/w | Да | Нет | Да | Да |
Caches/ |
cacheDirectory | кэш | r/w | Да * | Да * * * | Нет | |
tmp/ |
tempDirectory | - | r/w | Не * * | Да * * * | Нет |
-
Файлы сохраняются приложения перезагрузки и обновления, но этот каталог может быть очищен, когда ОС желаний. Ваше приложение должно иметь возможность воссоздать любое содержание, которое может быть удалено.
-
- Файлы могут сохраняться перезагрузками app, но не полагайтесь на это поведение. Для продолжения обновления файлов не гарантируется. Приложение должно удалить файлы из этого каталога, когда это применимо, как операционная система не гарантирует когда (или даже если) эти файлы будут удалены.
-
- *| ОС может очистить содержимое этого каталога, когда он считает это необходимым, но не полагайтесь на это. Необходимо снять этот каталог в зависимости от вашего приложения.
Расположения Android файловой системы
Путь к устройству | Cordova.File.* |
AndroidExtraFileSystems |
r/w? | стойкие? | Очищает ОС | частные |
---|---|---|---|---|---|---|
File:///android_asset/ |
applicationDirectory | r | Н/Д | Н/Д | Да | |
/ Data/data/< app-id > / |
applicationStorageDirectory | - | r/w | Н/Д | Н/Д | Да |
cache |
cacheDirectory | кэш | r/w | Да | Да * | Да |
files |
dataDirectory | файлы | r/w | Да | Нет | Да |
Documents |
документы | r/w | Да | Нет | Да | |
< sdcard > / |
externalRootDirectory | SDCard | r/w | Да | Нет | Нет |
Android/data/<app-id>/ |
externalApplicationStorageDirectory | - | r/w | Да | Нет | Нет |
cache |
externalCacheDirectry | кэш внешние | r/w | Да | Не * * | Нет |
files |
externalDataDirectory | файлы внешние | r/w | Да | Нет | Нет |
-
ОС может периодически удалять этот каталог, но не полагайтесь на это поведение. Очистите содержимое этого каталога в зависимости от вашего приложения. Если пользователь вручную очистить кэш, содержимое этого каталога будут удалены.
-
- ОС не ясно этот каталог автоматически; Вы несете ответственность за управление содержимым самостоятельно. Если пользователь вручную очистить кэш, содержимое каталога будут удалены.
Примечание: Если нельзя монтировать внешние накопители, cordova.file.external*
Свойстваnull
.
BlackBerry 10 расположения файловой системы
Путь к устройству | Cordova.File.* |
r/w? | стойкие? | Очищает ОС | частные |
---|---|---|---|---|---|
File:///Accounts/1000/AppData/ < app id > / |
applicationStorageDirectory | r | Н/Д | Н/Д | Да |
app/native |
applicationDirectory | r | Н/Д | Н/Д | Да |
data/webviews/webfs/temporary/local__0 |
cacheDirectory | r/w | Нет | Да | Да |
data/webviews/webfs/persistent/local__0 |
dataDirectory | r/w | Да | Нет | Да |
File:///Accounts/1000/Removable/SDCard |
externalRemovableDirectory | r/w | Да | Нет | Нет |
File:///Accounts/1000/Shared |
sharedDirectory | r/w | Да | Нет | Нет |
Примечание: при развертывании приложения для работы периметра, все пути относительны /accounts/1000-enterprise.
Особенности Android
Местоположение Android постоянного хранения
Есть несколько допустимых мест для хранения постоянных файлов на устройстве Android. Смотрите эту страницу для широкого обсуждения различных возможностей.
Предыдущие версии плагина будет выбирать расположение временных и постоянных файлов при запуске, основанный на ли устройство утверждал, что SD-карта (или эквивалентные хранения раздел) был смонтирован. Если была смонтирована SD-карты, или если большой внутренней памяти раздел был доступен (такие как на устройствах Nexus,), то постоянные файлы будут храниться в корне этого пространства. Это означало, что все apps Cordova могли видеть все файлы, имеющиеся на карте.
Если SD-карты не был доступен, то предыдущих версий будет хранить данные в /data/data/<packageId>
, которая изолирует приложения друг от друга, но все еще может причина данные распределяются между пользователями.
Это теперь можно выбрать, следует ли хранить файлы в месте хранения внутренних файлов, или с использованием предыдущей логики, с предпочтением в вашем приложении config.xml
файл. Чтобы сделать это, добавить один из этих двух линий в config.xml
:
<preference name="AndroidPersistentFileLocation" value="Internal" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
Без этой линии, будет использовать файл плагина Compatibility
по умолчанию. Если тег предпочтений присутствует и не является одним из этих значений, приложение не запустится.
Если ранее была отгружена приложения для пользователей, используя старые (до 1.0) версию этого плагина и имеет сохраненные файлы в файловой системе постоянных, то вы должны установить предпочтения Compatibility
. Переключение местоположение для «Внутреннего» будет означать, что существующие пользователи, которые обновить их применение может быть не в состоянии получить доступ к их сохраненные ранее файлы, в зависимости от их устройства.
Если ваше приложение является новым или ранее никогда не хранит файлы в стойких файловой системы, то Internal
как правило рекомендуется настройка.
Особенности iOS
cordova.file.applicationStorageDirectory
доступен только для чтения; попытка хранения файлов в корневом каталоге не удастся. Использовать один из другихcordova.file.*
свойства, определенные для iOS (толькоapplicationDirectory
иapplicationStorageDirectory
доступны только для чтения).FileReader.readAsText(blob, encoding)
encoding
Параметр не поддерживается, и UTF-8 кодирование действует всегда.
iOS место постоянного хранения
Существует два допустимых местоположений для хранения постоянных файлов на устройства iOS: документы каталогов и библиотека. Предыдущие версии плагина только когда-либо постоянные файлы хранятся в папке документы. Это был побочный эффект делает все файлы приложения в iTunes, который часто был непреднамеренным, особенно для приложений, которые обрабатывают большое количество мелких файлов, вместо того, чтобы производить полный комплект документов для экспорта, который является цель каталога.
Это теперь можно выбрать, следует ли хранить файлы в документы или каталоге библиотеки, с предпочтением в вашем приложении config.xml
файл. Чтобы сделать это, добавить один из этих двух линий в config.xml
:
<preference name="iosPersistentFileLocation" value="Library" />
<preference name="iosPersistentFileLocation" value="Compatibility" />
Без этой линии, будет использовать файл плагина Compatibility
по умолчанию. Если тег предпочтений присутствует и не является одним из этих значений, приложение не запустится.
Если ранее была отгружена приложения для пользователей, используя старые (до 1.0) версию этого плагина и имеет сохраненные файлы в файловой системе постоянных, то вы должны установить предпочтения Compatibility
. Переключение расположения Library
будет означать, что существующих пользователей обновить их применения будет не в состоянии получить доступ к их сохраненные ранее файлы.
Если ваше приложение является новым или ранее никогда не хранит файлы в стойких файловой системы, то Library
как правило рекомендуется настройка.
Особенности Firefox OS
API файловой системы изначально не поддерживается Firefox OS и реализуется как оболочка поверх indexedDB.
- Не вынимая непустые каталоги
- Не поддерживает метаданные для каталогов
- Методы
copyTo
иmoveTo
не поддерживает каталоги
Поддерживаются следующие пути данных: * applicationDirectory
-использует xhr
чтобы получить локальные файлы, которые упакованы с приложением. * dataDirectory
- Для постоянных данных конкретного приложения файлов. * cacheDirectory
-Кэшированных файлов, которые должны выжить перезагрузки приложения (Apps не следует полагаться на OS, чтобы удалить файлы из здесь).
Обновление примечания
В v1.0.0 этого плагина FileEntry
и DirectoryEntry
структур изменились, более соответствует опубликованной спецификации.
Предыдущий (pre-1.0.0) версии плагина хранятся устройства Абсолют файл расположение в fullPath
свойства Entry
объектов. Эти пути обычно будет выглядеть
/var/mobile/Applications/<application UUID>/Documents/path/to/file (iOS)
/storage/emulated/0/path/to/file (Android)
Эти пути также были возвращены toURL()
метода Entry
объектов.
С v1.0.0 fullPath
атрибут является путь к файлу, заданный относительно корня файловой системы HTML. Таким образом, выше пути будет теперь оба быть представлено FileEntry
объект с fullPath
из
/path/to/file
Если ваше приложение работает с устройства Абсолют путями, и ранее были получены эти пути через fullPath
свойства Entry
объектов, то вам следует обновить код для использования entry.toURL()
вместо этого.
Для обратной совместимости, resolveLocalFileSystemURL()
метод будет принимать путь Абсолют устройства и будет возвращать Entry
объект, соответствующий его, до тех пор, как этот файл существует в рамках либо TEMPORARY
или PERSISTENT
файловых систем.
Это особенно была проблема с плагином передачи файлов, который ранее использовался устройства Абсолют пути (и все еще может принять их). Он был обновлен для корректной работы с файловой системы URL, так что замена entry.fullPath
с entry.toURL()
должен решить любые вопросы, получить этот плагин для работы с файлами на устройстве.
В v1.1.0 возвращаемое значение из toURL()
был изменен (см. [CB-6394] (https://issues.apache.org/jira/browse/CB-6394)) для возвращения URL-адрес абсолютным «file://». где это возможно. Для обеспечения ' cdvfile:'-вы можете использовать URL-адрес toInternalURL()
сейчас. Этот метод будет возвращать теперь файловой системы URL формы
cdvfile://localhost/persistent/path/to/file
который может использоваться для уникальной идентификации файла.
Список кодов ошибок и значения
Когда возникает ошибка, один из следующих кодов будет использоваться.
Код | Постоянная |
---|---|
1 | NOT_FOUND_ERR |
2 | SECURITY_ERR |
3 | ABORT_ERR |
4 | NOT_READABLE_ERR |
5 | ENCODING_ERR |
6 | NO_MODIFICATION_ALLOWED_ERR |
7 | INVALID_STATE_ERR |
8 | SYNTAX_ERR |
9 | INVALID_MODIFICATION_ERR |
10 | QUOTA_EXCEEDED_ERR |
11 | TYPE_MISMATCH_ERR |
12 | PATH_EXISTS_ERR |
Настройка плагина (опционально)
Набор доступных файловых систем может быть настроен на платформе. IOS и Android признают тег в config.xml
имена которых файловые системы для установки. По умолчанию включены все корни файловой системы.
<preference name="iosExtraFilesystems" value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,root" />
Android
files
: Каталог для хранения внутреннего файла приложенияfiles-external
: Каталог хранения внешнего файла приложенияsdcard
: Глобальный внешний файл каталог хранения (это корень SD-карты, если таковая установлена). Вы должны иметьandroid.permission.WRITE_EXTERNAL_STORAGE
разрешение использовать это.cache
: Каталог внутреннего кэша приложенияcache-external
: Каталог приложения внешней кэш-памятиroot
: Все устройство файловой системы
Android поддерживает также Специальный файловую систему под названием «документы», которая представляет подкаталог «/ документы /» в пределах файловой системы «файлы».
iOS
library
: Каталог библиотеки приложенияdocuments
: Каталог документов приложенияcache
: Каталог кэша приложенияbundle
: Пакет приложения; расположение самого приложения на диске (только для чтения)root
: Все устройство файловой системы
По умолчанию каталоги библиотеки и документы можно синхронизировать с iCloud. Вы также можете заказать два дополнительных файловых систем, library-nosync
и documents-nosync
, которые представляют Специальный каталог не синхронизируются в /Library
или /Documents
файловой системы.