You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

275 lines
28 KiB

  1. <!---
  2. Licensed to the Apache Software Foundation (ASF) under one
  3. or more contributor license agreements. See the NOTICE file
  4. distributed with this work for additional information
  5. regarding copyright ownership. The ASF licenses this file
  6. to you under the Apache License, Version 2.0 (the
  7. "License"); you may not use this file except in compliance
  8. with the License. You may obtain a copy of the License at
  9. http://www.apache.org/licenses/LICENSE-2.0
  10. Unless required by applicable law or agreed to in writing,
  11. software distributed under the License is distributed on an
  12. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  13. KIND, either express or implied. See the License for the
  14. specific language governing permissions and limitations
  15. under the License.
  16. -->
  17. # cordova-plugin-file
  18. Этот плагин реализует API файла, позволяя доступ на чтение и запись в файлы, находящиеся на устройстве.
  19. Этот плагин основан на нескольких спецификации, в том числе: HTML5 API файла <http://www.w3.org/TR/FileAPI/>
  20. (Ныне несуществующей) каталоги и систему расширений Последнее: <http://www.w3.org/TR/2012/WD-file-system-api-20120417/> , хотя большая часть кода, плагин был написан, когда ранее спец был текущим: <http://www.w3.org/TR/2011/WD-file-system-api-20110419/>
  21. Он также реализует уничтожал spec: <http://dev.w3.org/2009/dap/file-system/file-writer.html>
  22. Для использования, пожалуйста, обратитесь к HTML5 скалы отличные [файловой системы статьи.][1]
  23. [1]: http://www.html5rocks.com/en/tutorials/file/filesystem/
  24. Обзор других вариантов хранения найти Cordova [хранения руководства][2].
  25. [2]: http://cordova.apache.org/docs/en/edge/cordova_storage_storage.md.html
  26. ## Установка
  27. cordova plugin add cordova-plugin-file
  28. ## Поддерживаемые платформы
  29. * Amazon Fire OS
  30. * Android
  31. * BlackBerry 10
  32. * Firefox OS
  33. * iOS
  34. * Windows Phone 7 и 8 *
  35. * Windows 8 *
  36. * *Эти платформы не поддерживают `FileReader.readAsArrayBuffer` , ни `FileWriter.write(blob)` .*
  37. ## Где хранить файлы
  38. По состоянию на v1.2.0 приведены URL-адреса для важных файлов в системные каталоги. Каждый URL-адрес в виде *file:///path/to/spot/*и может быть преобразован в `DirectoryEntry` с помощью`window.resolveLocalFileSystemURL()`.
  39. * `cordova.file.applicationDirectory`-Каталог только для чтения, где установлено приложение. (*iOS*, *Android*, *BlackBerry 10*)
  40. * `cordova.file.applicationStorageDirectory`-Корневой каталог приложения в песочнице; на iOS это место только для чтения (но определенных подкаталогов [как `/Documents` ], чтения записи). Все данные, содержащиеся в частных в приложение. ( *iOS*, *Android*, *BlackBerry 10*)
  41. * `cordova.file.dataDirectory`-Хранения стойкие и частных данных в приложения в песочнице с использованием внутренней памяти (на Android, если необходимо использовать внешнюю память, использовать `.externalDataDirectory` ). На iOS, этот каталог не синхронизируется с iCloud (использование `.syncedDataDirectory` ). (*iOS*, *Android*, *BlackBerry 10*)
  42. * `cordova.file.cacheDirectory`-Каталог для кэшированных данных файлов или все файлы, которые ваше приложение может повторно создать легко. ОС может удалить эти файлы, когда устройства хватает на хранение, тем не менее, приложения не должны опираться на OS, чтобы удалить файлы здесь. (*iOS*, *Android*, *BlackBerry 10*)
  43. * `cordova.file.externalApplicationStorageDirectory`-Пространство приложения на внешнем хранилище. (*Android*)
  44. * `cordova.file.externalDataDirectory`-Куда положить файлы данных конкретного приложения на внешнем хранилище. (*Android*)
  45. * `cordova.file.externalCacheDirectory`-Применение кэш на внешние накопители. (*Android*)
  46. * `cordova.file.externalRootDirectory`-Корень внешние накопители (SD карта). (*Android*, *BlackBerry 10*)
  47. * `cordova.file.tempDirectory`-Временный каталог, что ОС можно снять на будет. Не следует полагаться на OS, чтобы очистить этот каталог; Ваше приложение всегда следует удалять файлы в соответствующих случаях. (*iOS*)
  48. * `cordova.file.syncedDataDirectory`-Содержит файлы приложения, которые должны быть синхронизированы (например, к iCloud). (*iOS*)
  49. * `cordova.file.documentsDirectory`-Файлы для приложения, но это являются значимыми для других приложений (например, файлы Office). (*iOS*)
  50. * `cordova.file.sharedDirectory`-Файлы глобально доступной для всех приложений (*BlackBerry 10*)
  51. ## Макеты файловой системы
  52. Хотя технически деталь реализации, она может быть очень полезно знать как `cordova.file.*` карта свойства физические пути на реальном устройстве.
  53. ### iOS расположения файловой системы
  54. | Путь к устройству | `Cordova.File.*` | `iosExtraFileSystems` | r/w? | стойкие? | Очищает ОС | Синхронизация | частные |
  55. |:---------------------------------------------- |:--------------------------- |:--------------------- |:----:|:--------:|:----------:|:-------------:|:-------:|
  56. | `/ var/мобильного/применения/< UUID > /` | applicationStorageDirectory | - | r | Н/Д | Н/Д | Н/Д | Да |
  57. |    `appname.app/` | applicationDirectory | расслоение | r | Н/Д | Н/Д | Н/Д | Да |
  58. |       `www/` | - | - | r | Н/Д | Н/Д | Н/Д | Да |
  59. |    `Documents/` | documentsDirectory | документы | r/w | Да | Нет | Да | Да |
  60. |       `NoCloud/` | - | документы nosync | r/w | Да | Нет | Нет | Да |
  61. |    `Library` | - | Библиотека | r/w | Да | Нет | Да? | Да |
  62. |       `NoCloud/` | dataDirectory | Библиотека nosync | r/w | Да | Нет | Нет | Да |
  63. |       `Cloud/` | syncedDataDirectory | - | r/w | Да | Нет | Да | Да |
  64. |       `Caches/` | cacheDirectory | кэш | r/w | Да * | Да * * *| | Нет | Да |
  65. |    `tmp/` | tempDirectory | - | r/w | Не * * | Да * * *| | Нет | Да |
  66. * Файлы сохраняются приложения перезагрузки и обновления, но этот каталог может быть очищен, когда ОС желаний. Ваше приложение должно иметь возможность воссоздать любое содержание, которое может быть удалено.
  67. * * Файлы могут сохраняться перезагрузками app, но не полагайтесь на это поведение. Для продолжения обновления файлов не гарантируется. Приложение должно удалить файлы из этого каталога, когда это применимо, как операционная система не гарантирует когда (или даже если) эти файлы будут удалены.
  68. * * *| ОС может очистить содержимое этого каталога, когда он считает это необходимым, но не полагайтесь на это. Необходимо снять этот каталог в зависимости от вашего приложения.
  69. ### Расположения Android файловой системы
  70. | Путь к устройству | `Cordova.File.*` | `AndroidExtraFileSystems` | r/w? | стойкие? | Очищает ОС | частные |
  71. |:--------------------------------- |:----------------------------------- |:------------------------- |:----:|:--------:|:----------:|:-------:|
  72. | `File:///android_asset/` | applicationDirectory | | r | Н/Д | Н/Д | Да |
  73. | `/ Data/data/< app-id > /` | applicationStorageDirectory | - | r/w | Н/Д | Н/Д | Да |
  74. |    `cache` | cacheDirectory | кэш | r/w | Да | Да * | Да |
  75. |    `files` | dataDirectory | файлы | r/w | Да | Нет | Да |
  76. |       `Documents` | | документы | r/w | Да | Нет | Да |
  77. | `< sdcard > /` | externalRootDirectory | SDCard | r/w | Да | Нет | Нет |
  78. |    `Android/data/<app-id>/` | externalApplicationStorageDirectory | - | r/w | Да | Нет | Нет |
  79. |       `cache` | externalCacheDirectry | кэш внешние | r/w | Да | Не * * | Нет |
  80. |       `files` | externalDataDirectory | файлы внешние | r/w | Да | Нет | Нет |
  81. * ОС может периодически удалять этот каталог, но не полагайтесь на это поведение. Очистите содержимое этого каталога в зависимости от вашего приложения. Если пользователь вручную очистить кэш, содержимое этого каталога будут удалены.
  82. * * ОС не ясно этот каталог автоматически; Вы несете ответственность за управление содержимым самостоятельно. Если пользователь вручную очистить кэш, содержимое каталога будут удалены.
  83. **Примечание**: Если нельзя монтировать внешние накопители, `cordova.file.external*` Свойства`null`.
  84. ### BlackBerry 10 расположения файловой системы
  85. | Путь к устройству | `Cordova.File.*` | r/w? | стойкие? | Очищает ОС | частные |
  86. |:--------------------------------------------------- |:--------------------------- |:----:|:--------:|:----------:|:-------:|
  87. | `File:///Accounts/1000/AppData/ < app id > /` | applicationStorageDirectory | r | Н/Д | Н/Д | Да |
  88. |    `app/native` | applicationDirectory | r | Н/Д | Н/Д | Да |
  89. |    `data/webviews/webfs/temporary/local__0` | cacheDirectory | r/w | Нет | Да | Да |
  90. |    `data/webviews/webfs/persistent/local__0` | dataDirectory | r/w | Да | Нет | Да |
  91. | `File:///Accounts/1000/Removable/SDCard` | externalRemovableDirectory | r/w | Да | Нет | Нет |
  92. | `File:///Accounts/1000/Shared` | sharedDirectory | r/w | Да | Нет | Нет |
  93. *Примечание*: при развертывании приложения для работы периметра, все пути относительны /accounts/1000-enterprise.
  94. ## Особенности Android
  95. ### Местоположение Android постоянного хранения
  96. Есть несколько допустимых мест для хранения постоянных файлов на устройстве Android. Смотрите [эту страницу][3] для широкого обсуждения различных возможностей.
  97. [3]: http://developer.android.com/guide/topics/data/data-storage.html
  98. Предыдущие версии плагина будет выбирать расположение временных и постоянных файлов при запуске, основанный на ли устройство утверждал, что SD-карта (или эквивалентные хранения раздел) был смонтирован. Если была смонтирована SD-карты, или если большой внутренней памяти раздел был доступен (такие как на устройствах Nexus,), то постоянные файлы будут храниться в корне этого пространства. Это означало, что все apps Cordova могли видеть все файлы, имеющиеся на карте.
  99. Если SD-карты не был доступен, то предыдущих версий будет хранить данные в `/data/data/<packageId>` , которая изолирует приложения друг от друга, но все еще может причина данные распределяются между пользователями.
  100. Это теперь можно выбрать, следует ли хранить файлы в месте хранения внутренних файлов, или с использованием предыдущей логики, с предпочтением в вашем приложении `config.xml` файл. Чтобы сделать это, добавить один из этих двух линий в `config.xml` :
  101. <preference name="AndroidPersistentFileLocation" value="Internal" />
  102. <preference name="AndroidPersistentFileLocation" value="Compatibility" />
  103. Без этой линии, будет использовать файл плагина `Compatibility` по умолчанию. Если тег предпочтений присутствует и не является одним из этих значений, приложение не запустится.
  104. Если ранее была отгружена приложения для пользователей, используя старые (до 1.0) версию этого плагина и имеет сохраненные файлы в файловой системе постоянных, то вы должны установить предпочтения `Compatibility` . Переключение местоположение для «Внутреннего» будет означать, что существующие пользователи, которые обновить их применение может быть не в состоянии получить доступ к их сохраненные ранее файлы, в зависимости от их устройства.
  105. Если ваше приложение является новым или ранее никогда не хранит файлы в стойких файловой системы, то `Internal` как правило рекомендуется настройка.
  106. ## Особенности iOS
  107. * `cordova.file.applicationStorageDirectory`доступен только для чтения; попытка хранения файлов в корневом каталоге не удастся. Использовать один из других `cordova.file.*` свойства, определенные для iOS (только `applicationDirectory` и `applicationStorageDirectory` доступны только для чтения).
  108. * `FileReader.readAsText(blob, encoding)`
  109. * `encoding`Параметр не поддерживается, и UTF-8 кодирование действует всегда.
  110. ### iOS место постоянного хранения
  111. Существует два допустимых местоположений для хранения постоянных файлов на устройства iOS: документы каталогов и библиотека. Предыдущие версии плагина только когда-либо постоянные файлы хранятся в папке документы. Это был побочный эффект делает все файлы приложения в iTunes, который часто был непреднамеренным, особенно для приложений, которые обрабатывают большое количество мелких файлов, вместо того, чтобы производить полный комплект документов для экспорта, который является цель каталога.
  112. Это теперь можно выбрать, следует ли хранить файлы в документы или каталоге библиотеки, с предпочтением в вашем приложении `config.xml` файл. Чтобы сделать это, добавить один из этих двух линий в `config.xml` :
  113. <preference name="iosPersistentFileLocation" value="Library" />
  114. <preference name="iosPersistentFileLocation" value="Compatibility" />
  115. Без этой линии, будет использовать файл плагина `Compatibility` по умолчанию. Если тег предпочтений присутствует и не является одним из этих значений, приложение не запустится.
  116. Если ранее была отгружена приложения для пользователей, используя старые (до 1.0) версию этого плагина и имеет сохраненные файлы в файловой системе постоянных, то вы должны установить предпочтения `Compatibility` . Переключение расположения `Library` будет означать, что существующих пользователей обновить их применения будет не в состоянии получить доступ к их сохраненные ранее файлы.
  117. Если ваше приложение является новым или ранее никогда не хранит файлы в стойких файловой системы, то `Library` как правило рекомендуется настройка.
  118. ## Особенности Firefox OS
  119. API файловой системы изначально не поддерживается Firefox OS и реализуется как оболочка поверх indexedDB.
  120. * Не вынимая непустые каталоги
  121. * Не поддерживает метаданные для каталогов
  122. * Методы `copyTo` и `moveTo` не поддерживает каталоги
  123. Поддерживаются следующие пути данных: * `applicationDirectory` -использует `xhr` чтобы получить локальные файлы, которые упакованы с приложением. * `dataDirectory` - Для постоянных данных конкретного приложения файлов. * `cacheDirectory` -Кэшированных файлов, которые должны выжить перезагрузки приложения (Apps не следует полагаться на OS, чтобы удалить файлы из здесь).
  124. ## Обновление примечания
  125. В v1.0.0 этого плагина `FileEntry` и `DirectoryEntry` структур изменились, более соответствует опубликованной спецификации.
  126. Предыдущий (pre-1.0.0) версии плагина хранятся устройства Абсолют файл расположение в `fullPath` свойства `Entry` объектов. Эти пути обычно будет выглядеть
  127. /var/mobile/Applications/<application UUID>/Documents/path/to/file (iOS)
  128. /storage/emulated/0/path/to/file (Android)
  129. Эти пути также были возвращены `toURL()` метода `Entry` объектов.
  130. С v1.0.0 `fullPath` атрибут является путь к файлу, *заданный относительно корня файловой системы HTML*. Таким образом, выше пути будет теперь оба быть представлено `FileEntry` объект с `fullPath` из
  131. /path/to/file
  132. Если ваше приложение работает с устройства Абсолют путями, и ранее были получены эти пути через `fullPath` свойства `Entry` объектов, то вам следует обновить код для использования `entry.toURL()` вместо этого.
  133. Для обратной совместимости, `resolveLocalFileSystemURL()` метод будет принимать путь Абсолют устройства и будет возвращать `Entry` объект, соответствующий его, до тех пор, как этот файл существует в рамках либо `TEMPORARY` или `PERSISTENT` файловых систем.
  134. Это особенно была проблема с плагином передачи файлов, который ранее использовался устройства Абсолют пути (и все еще может принять их). Он был обновлен для корректной работы с файловой системы URL, так что замена `entry.fullPath` с `entry.toURL()` должен решить любые вопросы, получить этот плагин для работы с файлами на устройстве.
  135. В v1.1.0 возвращаемое значение из `toURL()` был изменен (см. \[CB-6394\] (https://issues.apache.org/jira/browse/CB-6394)) для возвращения URL-адрес абсолютным «file://». где это возможно. Для обеспечения ' cdvfile:'-вы можете использовать URL-адрес `toInternalURL()` сейчас. Этот метод будет возвращать теперь файловой системы URL формы
  136. cdvfile://localhost/persistent/path/to/file
  137. который может использоваться для уникальной идентификации файла.
  138. ## Список кодов ошибок и значения
  139. Когда возникает ошибка, один из следующих кодов будет использоваться.
  140. | Код | Постоянная |
  141. | ---:|:----------------------------- |
  142. | 1 | `NOT_FOUND_ERR` |
  143. | 2 | `SECURITY_ERR` |
  144. | 3 | `ABORT_ERR` |
  145. | 4 | `NOT_READABLE_ERR` |
  146. | 5 | `ENCODING_ERR` |
  147. | 6 | `NO_MODIFICATION_ALLOWED_ERR` |
  148. | 7 | `INVALID_STATE_ERR` |
  149. | 8 | `SYNTAX_ERR` |
  150. | 9 | `INVALID_MODIFICATION_ERR` |
  151. | 10 | `QUOTA_EXCEEDED_ERR` |
  152. | 11 | `TYPE_MISMATCH_ERR` |
  153. | 12 | `PATH_EXISTS_ERR` |
  154. ## Настройка плагина (опционально)
  155. Набор доступных файловых систем может быть настроен на платформе. IOS и Android признают <preference> тег в `config.xml` имена которых файловые системы для установки. По умолчанию включены все корни файловой системы.
  156. <preference name="iosExtraFilesystems" value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />
  157. <preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,root" />
  158. ### Android
  159. * `files`: Каталог для хранения внутреннего файла приложения
  160. * `files-external`: Каталог хранения внешнего файла приложения
  161. * `sdcard`: Глобальный внешний файл каталог хранения (это корень SD-карты, если таковая установлена). Вы должны иметь `android.permission.WRITE_EXTERNAL_STORAGE` разрешение использовать это.
  162. * `cache`: Каталог внутреннего кэша приложения
  163. * `cache-external`: Каталог приложения внешней кэш-памяти
  164. * `root`: Все устройство файловой системы
  165. Android поддерживает также Специальный файловую систему под названием «документы», которая представляет подкаталог «/ документы /» в пределах файловой системы «файлы».
  166. ### iOS
  167. * `library`: Каталог библиотеки приложения
  168. * `documents`: Каталог документов приложения
  169. * `cache`: Каталог кэша приложения
  170. * `bundle`: Пакет приложения; расположение самого приложения на диске (только для чтения)
  171. * `root`: Все устройство файловой системы
  172. По умолчанию каталоги библиотеки и документы можно синхронизировать с iCloud. Вы также можете заказать два дополнительных файловых систем, `library-nosync` и `documents-nosync` , которые представляют Специальный каталог не синхронизируются в `/Library` или `/Documents` файловой системы.