Ce plugin implémente une API de fichier permettant l'accès en lecture/écriture aux fichiers qui résident sur le périphérique.
Ce plugin est basé sur plusieurs spécifications, y compris : l'API de fichier HTML5 http://www.w3.org/TR/FileAPI/
Les répertoires (aujourd'hui disparue) et le système des extensions plus récentes : http://www.w3.org/TR/2012/WD-file-system-api-20120417/ bien que la plupart du code du plugin a été écrit quand une technique antérieure était en vigueur : http://www.w3.org/TR/2011/WD-file-system-api-20110419/
Il met également en œuvre la spécification FileWriter : http://dev.w3.org/2009/dap/file-system/file-writer.html
Pour son utilisation, veuillez vous reporter au HTML5 Rocks' excellent article de système de fichiers.
Pour un aperçu des autres options de stockage, consultez guide d'entreposage de Cordova.
Ce plugin définit global cordova.file
objet.
Bien que dans la portée globale, il n'est pas disponible jusqu'après la deviceready
événement.
document.addEventListener (« deviceready », onDeviceReady, false) ;
function onDeviceReady() {console.log(cordova.file);}
cordova plugin add cordova-plugin-file
* These platforms do not support FileReader.readAsArrayBuffer
nor FileWriter.write(blob)
.
À partir de v1.2.0, URL vers des répertoires de système de fichiers importants est fournis. Chaque URL est dans la forme *file:///path/to/spot/*et peut être converti en un DirectoryEntry
à l'aidewindow.resolveLocalFileSystemURL()
.
cordova.file.applicationDirectory
-Lecture seule répertoire où l'application est installée. (iOS, Android, BlackBerry 10)
cordova.file.applicationStorageDirectory
-Répertoire racine du bac à sable de l'application ; cet endroit est en lecture seule sur iOS (mais les sous-répertoires spécifiques [comme /Documents
] sont en lecture / écriture). Toutes les données qu'il contient est privé de l'application. ( iOS, Android, BlackBerry 10)
cordova.file.dataDirectory
-Stockage des données persistants et privés au sein de bac à sable de l'application à l'aide de la mémoire interne (sur Android, si vous avez besoin d'utiliser une mémoire externe, utilisez .externalDataDirectory
). Sur iOS, ce répertoire n'est pas synchronisé avec iCloud (utiliser .syncedDataDirectory
). (iOS, Android, BlackBerry 10)
cordova.file.cacheDirectory
-Répertoire pour les fichiers de données en mémoire cache ou les fichiers que votre application peut recréer facilement. L'OS peut supprimer ces fichiers lorsque l'appareil faiblit sur stockage, néanmoins, les applications ne doivent pas compter sur l'OS pour supprimer les fichiers ici. (iOS, Android, BlackBerry 10)
cordova.file.externalApplicationStorageDirectory
-Espace l'application sur le stockage externe. (Android)
cordova.file.externalDataDirectory
-Où placer les fichiers de données d'application spécifiques sur le stockage externe. (Android)
cordova.file.externalCacheDirectory
-Cache de l'application sur le stockage externe. (Android)
cordova.file.externalRootDirectory
-Racine de stockage externe (carte SD). (Android, BlackBerry 10)
cordova.file.tempDirectory
-Répertoire temp que l'OS peut effacer à volonté. Ne comptez pas sur l'OS pour effacer ce répertoire ; votre application doit toujours supprimer les fichiers selon le cas. (iOS)
cordova.file.syncedDataDirectory
-Contient des fichiers d'app spécifique qui doivent se synchroniser (par exemple à iCloud). (iOS)
cordova.file.documentsDirectory
-Fichiers privés à l'app, mais qui sont significatives pour l'autre application (par exemple les fichiers Office). (iOS)
cordova.file.sharedDirectory
-Fichiers disponibles globalement à toutes les applications (BlackBerry 10)
Bien que techniquement un détail d'implémentation, il peut être très utile de savoir comment les cordova.file.*
carte de propriétés à des chemins d'accès physiques sur un périphérique réel.
Chemin de l'unité | Cordova.file.* |
iosExtraFileSystems |
r/w ? | persistants ? | OS efface | Sync | privé |
---|---|---|---|---|---|---|---|
/ var/mobile/Applications/< UUID > / |
applicationStorageDirectory | - | r | N/A | N/A | N/A | Oui |
appname.app/ |
applicationDirectory | Bundle | r | N/A | N/A | N/A | Oui |
www/ |
- | - | r | N/A | N/A | N/A | Oui |
Documents/ |
documentsDirectory | documents | r/w | Oui | Non | Oui | Oui |
NoCloud/ |
- | documents-nosync | r/w | Oui | Non | Non | Oui |
Library |
- | Bibliothèque | r/w | Oui | Non | Oui ? | Oui |
NoCloud/ |
dataDirectory | Bibliothèque-nosync | r/w | Oui | Non | Non | Oui |
Cloud/ |
syncedDataDirectory | - | r/w | Oui | Non | Oui | Oui |
Caches/ |
cacheDirectory | cache | r/w | Oui * | Oui*** | Non | Oui |
tmp/ |
tempDirectory | - | r/w | Non** | Oui*** | Non | Oui |
\ * Fichiers persistent à travers l'application redémarre et mises à niveau, mais ce répertoire peut être effacé à chaque fois que le système d'exploitation désire. Votre application doit être en mesure de recréer tout contenu qui pourrait être supprimé.
** Fichiers peuvent persister redémarrages de l'application, mais ne vous fiez pas ce comportement. Les fichiers ne sont pas garantis à persister dans l'ensemble de mises à jour. Votre application doit supprimer les fichiers de ce répertoire lorsqu'elle s'applique, comme le système d'exploitation ne garantit pas quand (ou même si) ces fichiers sont supprimés.
**\ * Le système d'exploitation peut effacer le contenu de ce répertoire chaque fois qu'il se sent il est nécessaire, mais ne comptez pas là-dessus. Vous devez supprimer ce répertoire comme approprié pour votre application.
Chemin de l'unité | Cordova.file.* |
AndroidExtraFileSystems |
r/w ? | persistants ? | OS efface | privé |
---|---|---|---|---|---|---|
file:///android_asset/ |
applicationDirectory | r | N/A | N/A | Oui | |
/ données/data/app < id > / |
applicationStorageDirectory | - | r/w | N/A | N/A | Oui |
cache |
cacheDirectory | cache | r/w | Oui | Oui\ * | Oui |
files |
dataDirectory | fichiers | r/w | Oui | Non | Oui |
Documents |
documents | r/w | Oui | Non | Oui | |
< sdcard > / |
externalRootDirectory | sdcard | r/w | Oui | Non | Non |
Android/data/<app-id>/ |
externalApplicationStorageDirectory | - | r/w | Oui | Non | Non |
cache |
externalCacheDirectry | cache-externe | r/w | Oui | Non** | Non |
files |
externalDataDirectory | fichiers externes | r/w | Oui | Non | Non |
\ * L'OS peut effacer périodiquement ce répertoire, mais ne vous fiez pas ce comportement. Effacer le contenu de ce répertoire comme approprié pour votre application. Un utilisateur doit purger le cache manuellement, le contenu de ce répertoire est supprimé.
** Le système d'exploitation n'efface pas ce répertoire automatiquement ; vous êtes chargé de gérer le contenu vous-même. L'utilisateur devrait purger le cache manuellement, le contenu du répertoire est supprimé.
Remarque: si le stockage externe ne peut pas être monté, les cordova.file.external*
sont des propriétésnull
.
Chemin de l'unité | Cordova.file.* |
r/w ? | persistants ? | OS efface | privé |
---|---|---|---|---|---|
file:///Accounts/1000/AppData/ < id app > / |
applicationStorageDirectory | r | N/A | N/A | Oui |
app/native |
applicationDirectory | r | N/A | N/A | Oui |
data/webviews/webfs/temporary/local__0 |
cacheDirectory | r/w | Non | Oui | Oui |
data/webviews/webfs/persistent/local__0 |
dataDirectory | r/w | Oui | Non | Oui |
file:///Accounts/1000/Removable/sdcard |
externalRemovableDirectory | r/w | Oui | Non | Non |
file:///Accounts/1000/Shared |
sharedDirectory | r/w | Oui | Non | Non |
Remarque: lorsque l'application est déployée dans le périmètre de travail, tous les chemins sont par rapport à /accounts/1000-enterprise.
Il y a plusieurs emplacements valides pour stocker des fichiers persistants sur un appareil Android. Voir cette page pour une analyse approfondie des diverses possibilités.
Les versions précédentes du plugin choisirait l'emplacement des fichiers temporaires et persistantes au démarrage, basé sur la question de savoir si le dispositif réclamé que la carte SD (ou une partition de stockage équivalent) a été montée. Si la carte SD a été montée, ou si une partition de stockage interne importante était disponible (comme sur les appareils Nexus,) puis les fichiers persistants seraient stockés dans la racine de cet espace. Cela signifie que toutes les apps de Cordova pouvaient voir tous les fichiers disponibles sur la carte.
Si la carte SD n'était pas disponible, les versions précédentes pourraient stocker des données sous /data/data/<packageId>
, qui isole des apps de l'autre, mais peut encore cause données à partager entre les utilisateurs.
Il est maintenant possible de choisir de stocker les fichiers dans l'emplacement de stockage de fichier interne, ou en utilisant la logique précédente, avec une préférence au sein de votre application config.xml
fichier. Pour ce faire, ajoutez l'un de ces deux lignes de config.xml
:
< nom de l'option = « AndroidPersistentFileLocation » value = « Internal » / >< nom de préférence = « AndroidPersistentFileLocation » value = « Compatibilité » / >
Sans cette ligne, utilisera le fichier plugin Compatibility
par défaut. Si une balise de préférence est présente et n'est pas une des valeurs suivantes, l'application ne démarrera pas.
Si votre application a déjà été expédiée aux utilisateurs, en utilisant une ancienne (avant 1.0) version de ce plugin et dispose des fichiers stockés dans le système de fichiers persistant, alors vous devez définir la préférence au Compatibility
. Commutation de l'emplacement « Internal » signifierait que les utilisateurs existants qui mettre à niveau leur application peuvent être impossible d'accéder à leurs fichiers déjà enregistrés, selon leur appareil.
Si votre application est nouvelle ou a jamais précédemment stocké les fichiers dans le système de fichiers persistant, puis la Internal
réglage est généralement recommandé.
Liste des répertoires actifs est vraiment lent sur Android. Vous pouvez accélérer il vers le haut, en ajoutant src/android/build-extras.gradle
à la racine de votre projet android (requiert également cordova-android@4.0.0 ou supérieur).
cordova.file.applicationStorageDirectory
est en lecture seule ; tentative de stocker des fichiers dans le répertoire racine échoue. Utilisez l'une de l'autre cordova.file.*
les propriétés définies pour iOS (seulement applicationDirectory
et applicationStorageDirectory
sont en lecture seule).FileReader.readAsText(blob, encoding)
encoding
paramètre n'est pas pris en charge, et le codage UTF-8 est toujours en vigueur.Il y a deux emplacements valides pour stocker des fichiers persistants sur un appareil iOS : le répertoire de Documents et le répertoire de la bibliothèque. Les versions précédentes du plugin stockaient ne jamais fichiers persistants dans le répertoire de Documents. Cela a eu l'effet secondaire de rendre tous les fichiers de l'application visible dans iTunes, qui était souvent inattendus, en particulier pour les applications qui traitent beaucoup de petits fichiers, plutôt que de produire des documents complets destinés à l'exportation, qui est l'objectif visé par le répertoire.
Il est maintenant possible de choisir de stocker les fichiers dans le répertoire de bibliothèque, avec une préférence au sein de votre application ou de documents config.xml
fichier. Pour ce faire, ajoutez l'un de ces deux lignes de config.xml
:
< nom de l'option = « iosPersistentFileLocation » value = « Library » / >< nom de préférence = « iosPersistentFileLocation » value = « Compatibilité » / >
Sans cette ligne, utilisera le fichier plugin Compatibility
par défaut. Si une balise de préférence est présente et n'est pas une des valeurs suivantes, l'application ne démarrera pas.
Si votre application a déjà été expédiée aux utilisateurs, en utilisant une ancienne (avant 1.0) version de ce plugin et dispose des fichiers stockés dans le système de fichiers persistant, alors vous devez définir la préférence au Compatibility
. Changer l'emplacement de Library
voudrait dire que les utilisateurs existants qui mettre à niveau leur application serait incapables d'accéder à leurs fichiers déjà enregistrés.
Si votre application est nouvelle ou a jamais précédemment stocké les fichiers dans le système de fichiers persistant, puis la Library
réglage est généralement recommandé.
L'API de système de fichier n'est pas nativement pris en charge par Firefox OS et est implémentée comme une cale d'épaisseur sur le dessus d'indexedDB.
copyTo
et moveTo
ne prennent pas en charge les répertoiresLes chemins de données suivants sont pris en charge: * applicationDirectory
-utilise xhr
pour obtenir des fichiers les qui sont emballées avec l'app. * dataDirectory
- Pour les fichiers de données persistantes de app spécifique. * cacheDirectory
-Mise en cache de fichiers qui doivent survivre les redémarrages de l'application (les applications ne doivent pas compter sur le système d'exploitation pour supprimer les fichiers ici).
fs.root.getDirectory (' dir1/dir2 ', {create:true}, successCallback, errorCallback)
échouera si dir1 n'existait pas.cdvfile://localhost
(ressources locales) seulement. C'est-à-dire les ressources externes ne sont pas supportés par l'intermédiaire de cdvfile
.close
la fonction n'est pas pris en charge.FileSaver
et BlobBuilder
ne sont pas pris en charge par ce plugin et n'ont stubs.requestAllFileSystems
. Cette fonction est également absent dans les cahier des charges.create: true
drapeau pour le répertoire existant.readAsDataURL
fonction est prise en charge, mais le mediatype en Chrome dépend de l'extension entrée, mediatype dans IE est toujours vide (qui est le même que le texte-plaine
selon la spécification), le mediatype dans Firefox est toujours application/octet-stream
. Par exemple, si le contenu est abcdefg
puis Firefox renvoie données : application / octet-stream ; base64, YWJjZGVmZw ==
, c'est à dire les retours données:; base64, YWJjZGVmZw ==
, retours de Chrome données : < mediatype selon l'extension de nom d'entrée > ; base64, YWJjZGVmZw ==
.toInternalURL
retourne le chemin d'accès dans le formulaire file:///persistent/path/to/entry
(Firefox, IE). Chrome retourne le chemin d'accès dans le formulaire cdvfile://localhost/persistent/file
.filePluginIsReady
. Exemple :window.addEventListener('filePluginIsReady', function(){ console.log('File plugin is ready');}, false);
Vous pouvez utiliser la fonction window.isFilePluginReadyRaised
pour vérifier si les événement était déjà déclenché. -quotas de window.requestFileSystem temporaire et permanent de système de fichiers ne sont pas limités en Chrome. -Pour augmenter le stockage persistant en Chrome, vous devez appeler la méthode window.initPersistentFileSystem
. Quota de stockage persistant est 5 Mo par défaut. -Chrome nécessite --permettre-fichier-accès-de-fichiers
exécuter l'argument au support API via le protocole file:///
. -Fichier
objet changera pas si vous utilisez le drapeau {create:true}
lors du passage d'une entrée
existante. -événements annulables
propriété a la valeur true dans Chrome. Il s'agit à l'encontre de la spécification. -toURL
renvoie à Chrome système de fichiers :
-préfixe de chemin d'accès selon l'application hôte. Par exemple, filesystem:file:///persistent/somefile.txt
, filesystem:http://localhost:8080/persistent/somefile.txt
. -résultat de la fonction toURL
ne contient-elle pas de barre oblique dans le cas d'entrée d'annuaire. Chrome résout répertoires avec barre oblique-trainés URL correctement cependant. -resolveLocalFileSystemURL
méthode nécessite l' entrant url
préfixe de système de fichiers
. Par exemple, le paramètre d'url
pour resolveLocalFileSystemURL
devrait être dans la forme filesystem:file:///persistent/somefile.txt
par opposition à la forme file:///persistent/somefile.txt
dans Android. -Déconseillée toNativeURL
fonction n'est pas prise en charge et n'est pas une ébauche. -fonction de setMetadata
n'est pas stipulée dans le devis et pas pris en charge. -INVALID_MODIFICATION_ERR (code: 9) est levée au lieu de SYNTAX_ERR(code: 8) sur la demande d'un système de fichier inexistant. -INVALID_MODIFICATION_ERR (code: 9) est levée au lieu de PATH_EXISTS_ERR(code: 12) à essayer de créer exclusivement un fichier ou un répertoire, qui existe déjà. -INVALID_MODIFICATION_ERR (code: 9) est levée au lieu de NO_MODIFICATION_ALLOWED_ERR(code: 6) à essayer d'appeler removeRecursively sur le système de fichiers racine. -INVALID_MODIFICATION_ERR (code: 9) est levée au lieu de NOT_FOUND_ERR(code: 1) en essayant de moveTo répertoire qui n'existe pas.
.
et .
ne sont pas pris en charge.file:///
-mode ; seul le mode hébergé est pris en charge (http://localhost:xxxx).taille
pour la fonction requestFileSystem
n'affecte pas le système de fichiers dans Firefox et IE.readAsBinaryString
n'est pas indiquée dans les spécifications et pas pris en charge dans Internet Explorer et n'a pas une ébauche.file.type
est toujours null.setMetadata
fonction, qui n'est pas indiquée dans les spécifications supporte modificationTime
changement de champ seulement.copyTo
et moveTo
ne supportent pas les répertoires.abort
et truncate
ne sont pas supportées.writer.onprogress = function() { /*commands*/ };
V1.0.0 de ce plugin, les structures FileEntry
et DirectoryEntry
ont changé, pour être plus conforme à la spécification publiée.
Les versions précédentes de (pré-1.0.0) du plugin stockaient le dispositif-absolu--emplacement du fichier dans la propriété fullPath
d'objets d'entrée
. Ces chemins seraient présente généralement comme
/ var/mobile/Applications/< application UUID >/Documents/chemin/vers/fichier (iOS), /storage/emulated/0/path/to/file (Android)
Ces chemins ont été également retournés par la méthode de toURL()
les objets d'entrée
.
Avec v1.0.0, l'attribut fullPath
est le chemin d'accès au fichier, par rapport à la racine du système de fichiers HTML. Ainsi, les chemins d'accès ci-dessus seraient maintenant tous les deux être représentée par un objet FileEntry
avec un fullPath
de
/path/to/file
Si votre application fonctionne avec le dispositif-absolu-chemins et que vous avez récupéré précédemment ces chemins d'accès par le biais de la propriété fullPath
d'objets d'entrée
, puis vous devez mettre à jour votre code afin d'utiliser entry.toURL()
à la place.
Pour vers l'arrière la compatibilité, la méthode resolveLocalFileSystemURL()
sera un chemin absolu de l'unité et retourne un objet Entry
correspondant à elle, tant que ce fichier existe au sein des systèmes de fichiers les TEMPORARY
ou PERSISTENT
.
Cela a été particulièrement un problème avec le plugin de transfert de fichiers, qui autrefois périphérique-absolu-chemins (et peut encore accepter). Il a été mis à jour pour fonctionner correctement avec le système de fichiers URL, afin de remplacer entry.fullPath
par entry.toURL()
devrait résoudre tout problème obtenir ce plugin pour travailler avec des fichiers sur le périphérique.
Dans v1.1.0 la valeur de retour de toURL()
a été changée (voir [CB-6394] (https://issues.apache.org/jira/browse/CB-6394)) pour renvoyer une URL absolue "file://". dans la mesure du possible. Pour assurer un ' cdvfile:'-URL, vous pouvez utiliser toInternalURL()
maintenant. Cette méthode retourne maintenant filesystem URL du formulaire
cdvfile://localhost/persistent/path/to/file
qui peut servir à identifier de manière unique le fichier.
Lorsqu'une erreur est levée, l'un des codes suivants sera utilisé.
Code | Constant |
---|---|
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 |
L'ensemble des systèmes de fichiers disponibles peut être configurée par plate-forme. Les iOS et Android reconnaissent une balise dans le fichier config.xml
qui nomme les systèmes de fichiers à installer. Par défaut, toutes les racines du système de fichiers sont activées.
<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" />
files
: répertoire de stockage de fichier interne de l'applicationfiles-external
: répertoire de l'application de stockage de fichier externesdcard
: le répertoire de stockage global fichier externe (c'est la racine de la carte SD, s'il est installé). Vous devez avoir la permission de android.permission.WRITE_EXTERNAL_STORAGE
de l'utiliser.cache
: répertoire de cache interne de l'applicationcache-external
: répertoire de cache externe de l'applicationroot
: le système de fichiers de tout dispositifAndroid prend également en charge un système de fichiers spécial nommé « documents », qui représente un sous-répertoire « / Documents / » dans le système de fichiers « files ».
library
: répertoire de bibliothèque de l'applicationdocuments
: répertoire de Documents de l'applicationcache
: répertoire de Cache de l'applicationbundle
: bundle de l'application ; l'emplacement de l'application elle-même sur disque (lecture seule)root
: le système de fichiers de tout dispositifPar défaut, vous peuvent synchroniser les répertoires de la bibliothèque et les documents à iCloud. Vous pouvez également demander des deux systèmes de fichiers supplémentaires, library-nosync
et documents-nosync
, qui représentent un répertoire spécial non synchronisées dans le /Library
ou système de fichiers / Documents
.