Cordova / PhoneGap Open Fichier téléchargé (InAppBrowser)
À l'aide de Cordova/PhoneGap 3.3.0, je suis le téléchargement d'un fichier en utilisant le transfert de fichiers du plugin, puis en essayant de l'ouvrir à l'aide de la InAppBrowser plugin. Je peux télécharger le fichier correctementet le placer dans le répertoire temp. Depuis le Fichier plugin utilise maintenant schéma d'URL, je ne peux pas comprendre comment passer de la correction de l'url/chemin d'accès à la window.open
méthode de la InAppBrowser plugin. Je ne peux pas trouver toute la documentation pertinente. Tous les "de télécharger et d'ouvrir à la documentation" je trouve, c'est en dehors de la date et de pré-URL-schéma.
Liens pertinents:
- Cordova la Libération d'info sur les Nouvelles Versions Plugin
- Le fichier readme pour le transfert de fichiers du plugin
- Le fichier readme pour le InAppBrowser plugin
- Comment ouvrir un fichier local avec InAppBrowser avec les récents changements de schéma d'URL dans le Fichier plugin - Question similaire
De la date des exemples que j'ai trouvé:
- Transfert de fichier télécharger le fichier en question sur Cordova 3.1 - Cet utilisateur rétrogradé à une version antérieure, car ils ne pouvaient pas le comprendre
- https://gist.github.com/devgeeks/4982983 - Cet exemple utilise
entry.fullPath
qui est maintenant dépréciée en faveur detoURL()
Voici mon code:
var uri = encodeURI("http://some.url/file.pdf");
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0,
function (fileSystem) {
var fileTransfer = new FileTransfer();
var filename = fileSystem.root.toURL() + uri.substr(uri.lastIndexOf("/") + 1);
fileTransfer.download(uri, filename,
function(entry) { //download success
var path = entry.toURL(); //**THIS IS WHAT I NEED**
window.open(path, "_system");
},
function(error) {} //irrelevant download error
);
},
function(error) {} //irrelevant request fileSystem error
);
Je suis actuellement en train de tester Android sur un Nexus 7 et Nexus 5. Le InAppBrowser correctement ouvre le pdf par défaut lanceur (dans mon cas, Adobe Reader), mais puis-je obtenir un "Le chemin d'accès du document n'est pas valide" erreur.
[Mise à jour: affichage des valeurs de retour]
J'ai essayé toutes les combinaisons suivantes pour le chemin d'accès du fichier:
var path = entry.toURL(); //"cdvfile://localhost/temporary/file.pdf"
var path = entry.fullPath; //"file.pdf"
var path = fileSystem.root.toURL() + filename; //"cdvfile://localhost/temporary/file.pdf"
var path = fileSystem.root.fullPath + filename; //"/file.pdf"
source d'informationauteur chadiusvt
Vous devez vous connecter pour publier un commentaire.
Je PENSE avoir une solution à cela, mais c'est un peu méchant.
Je grepped à travers le cordova JAVA et cherché des endroits, il construit une entrée dans le fichier d'objet JSON. En particulier par la recherche de lieux où son ajout
fullPath
à l'objet.J'ai ajouté une entrée supplémentaire pour "fullAbsolutePath" avec la valeur
[file].getAbsolutePath()
où[file]
est ce que java.io.fichier exemple est à proximité. Je l'ai fait dans tous les endroits que j'ai pu trouver, juste pour être sûr, et parce qu'il ne semble pas mal quoi que ce soit.Puis j'ai modifié FileEntry.js et File.js dans les plugins\dossier à peuplent également que la valeur de l'entrée de fichier de l'objet.
Encore en train de travailler sur the kinks, mais je crois que je suis sur la bonne voie...
Je pense que la meilleure solution serait de modifier le inAppBrowser plugin pour reconnaître et résoudre les cordovaFile://protocole et je suis sûr que ils ont obscurci l'absolu chemin du système de fichiers sur le but - mais que peut-être un peu au-delà de moi.
EDIT - Yup! cela fonctionne! Je peux maintenant prendre une entrée de fichier, appelez la méthode de fichiers, puis de lire fullSystemPath au large de la fileObject. La valeur, c'est comme "/storage/emulated/0/quel que soit/" sur mon android. Juste besoin d'ajouter le préfixe "file://" et la fenêtre.ouvrir l'acceptera.
Depuis Cordova 3.4 le protocole de fichier a changé et au lieu d'utiliser fullPath ils offrent maintenant la toURL() qui retourne une cdvfile://chemin/vers/votre/fichier.ext chemin.
Ainsi, lorsque vous téléchargez un fichier à l'aide du système de fichiers de l'objet de rappel (avec l'entrée de l'argumentation) il suffit d'appeler l'entrée.toURL() et l'ouverture de cette aide de l'instruction suivante pour l'ouvrir - en supposant que vous avez InApBrowser installé et la _blank ouvrira la InAppBrowser de la fenêtre:
Je l'ai écrit dans ce post sur mon blog (si vous voulez toutes les références et informations de fond).
Dans la dernière cordova docs ils disent
Ce que vous pouvez faire est de retirer
cdvfile://localhost/persistent
d'avoir une url qui fonctionne avec votre fenêtre.ouvert. (peut-être commencer avec une alerte ou une console.journal de ce que vous obtenez avecentry.toURL()
)Dans le plugin actuel branche dev il y a une solution:
Entrée.toNativeURL() - Renvoie le chemin complet du fichier dans le système de fichiers de l'appareil.
https://github.com/apache/cordova-plugin-file/tree/dev
Je sais que c'est déjà répondu, mais j'ai eu le plus de succès avec
entry.toInternalURL()
.Le chemin à suivre pour "cdvfile://localhost/persistante" est comme une racine de l'application (dossier www) chemin d'accès. En d'autres termes, je veux dire, vous avez accès à des images ou des fichiers téléchargés en utilisant le chemin qui suivent le "cdvfile://localhost/persistante".
Exemple
Télécharger Chemin de la cible: "cdvfile://localhost/persistent/MyImages/thebestimageever.jpg"
Dans une balise d'image HTML, je pourrais faire cela:
<img src="/MyImages/thebestimageever.jpg" />
Et il fonctionne bien.
Il suffit d'écrire la fenêtre.ouvert au sein de la méthode de téléchargement ou de demander de système de fichiers et de nouveau avant de l'ouvrir si vous voulez faire séparément
}
si votre destination est plus que d'un niveau de dossier puis vous avez qu'à demander getDirectory de manière récursive un par un (si vos dossiers sont déjà créés, puis un appel de la méthode est assez)
PS: sur iOS fichiers sont téléchargés dans 'Documents' du dossier et pas de "www", donc pas le même emplacement de votre app.js le contenu comme le prétendent certains
- si vous ouvrez une page html avec css et js téléchargé à partir d'un dossier décompressé, alors vous devez faire quelques changements sur InAppBrowser.m pour le charger correctement