JavaScript: Créer et enregistrer le fichier
J'ai des données que je veux écrire dans un fichier, et d'ouvrir une boîte de dialogue de fichier pour l'utilisateur de choisir où enregistrer le fichier. Ce serait formidable si elle a travaillé dans tous les navigateurs, mais il a de travailler dans google Chrome. Je veux faire cela tous les côté client.
Fondamentalement, je voudrais savoir quoi mettre dans cette fonction:
saveFile: function(data)
{
}
Où la fonction prend dans les données, a l'utilisateur de sélectionner un emplacement pour enregistrer le fichier, et crée un fichier dans l'emplacement avec les données.
À l'aide de HTML est bien aussi, si ça peut aider.
- "Fondamentalement, je voudrais savoir quoi mettre dans cette fonction:", à l'essence de chaque bonne question!
- A été une copie exacte de Créer un fichier dans la mémoire de l'utilisateur à télécharger, pas par le serveur pendant des années.
Vous devez vous connecter pour publier un commentaire.
Une très légère amélioration de la code par Awesomeness01 (pas besoin de balise d'ancrage) avec plus comme suggéré par trueimage (support pour IE):
Testé pour fonctionner correctement dans Chrome, FireFox et IE10.
Dans Safari, les données est ouverte dans un nouvel onglet et on aurait à enregistrer manuellement ce fichier.
javascript:function download(text, name, type) { var a = document.getElementById("content"); var file = new Blob([text], {type: type}); a.href = URL.createObjectURL(file); a.download = name; }
var a = document.createElement("a")
devrait être dans leelse
branche, sinon, IE10+ va créer, mais pas supprimer le point d'ancrage (<a>
) de l'élément.var file = new Blob([data], {type});
Ce projet sur github a l'air prometteur:
https://github.com/eligrey/FileSaver.js
Également jeter un oeil à la démo ici:
http://eligrey.com/demos/FileSaver.js/
JS:
HTML:
Et il vous faudra alors télécharger le fichier en mettant le téléchargement de l'attribut de la balise d'ancrage.
La raison pour laquelle j'aime mieux cela que la création de données d'url, c'est que vous n'avez pas à faire un gros url longue, vous pouvez tout simplement de générer une url temporaire.
if("URL"in window&&"createObjectURL"in URL&&"download"in Element.prototype)
: autre personne, puis il suffit de changer la méthode de téléchargement ou de l'avis que le navigateur ne prend pas en charge les objets requis pour télécharger le fichier.Le choix de l'emplacement pour enregistrer le fichier avant de créer, il n'est pas possible. Mais il est possible, au moins en Chrome, pour générer des fichiers à l'aide de JavaScript. Voici un vieil exemple de la mine de création d'un fichier CSV. L'utilisateur sera invité à le télécharger. Cela, malheureusement, ne fonctionne pas bien dans d'autres navigateurs, en particulier IE.
JS:
HTML:
Essayez d'utiliser ce qu'il télécharge le fichier et tout ce que vous avez à faire est de modifier les attributs onclick.
JS:
CSS:
HTML:
Pour les plus récentes des navigateurs comme google Chrome, vous pouvez utiliser le Fichier API comme dans ce tutoriel:
Essayé ceci dans la console, et ça fonctionne.
Vous ne pouvez pas le faire uniquement en Javascript. Le code Javascript s'exécutant sur les navigateurs n'ont pas assez d'autorisation pour l'instant (il y a des propositions) pour des raisons de sécurité.
Au lieu de cela, je vous conseille d'utiliser Downloadify:
Vous pouvez voir une simple démo ici où vous fournissent le contenu et pouvez tester l'enregistrement/annulation/fonctionnalité de gestion d'erreur.
Pour Chrome et Firefox, j'ai été en utilisant un purement méthode JavaScript.
(Mon application ne peut pas utiliser un package comme
Blob.js
parce qu'il est servi à partir d'un moteur spécial: un DSP avec un WWWeb serveur entassés dans et peu de place pour quoi que ce soit.)Notes, mises en garde, et la belette-mots:
sourceText
est plus gros qu'un MO, Chrome parfois (parfois seulement) est coincé dans son propre télécharger sans aucune indication d'échec; Firefox, jusqu'à présent, n'a pas exposé ce problème. La cause pourrait être une goutte limitation dans google Chrome. Franchement, je ne sais pas; si quelqu'un a des idées sur la façon de corriger (ou détecter au moins), veuillez les poster. Si le téléchargement anomalie se produit, lorsque le Chrome, le navigateur est fermé, il génère un diagnostic tels queJavascript a un système de fichiers de l'API. Si vous pouvez traiter avec la fonction de travail uniquement dans Chrome, un bon point de départ serait: http://www.html5rocks.com/en/tutorials/file/filesystem/.
StreamSaver est une alternative à enregistrer des fichiers très volumineux sans avoir à conserver toutes les données dans la mémoire.
En effet il émule tout le serveur de la dose lors de l'enregistrement d'un fichier, mais tous les côté client avec le service du travailleur.
Vous pouvez obtenir soit l'écrivain et écrire manuellement Uint8Array est à elle ou d'un tuyau, d'un binaire readableStream à l'écriture de flux
Il y a quelques exemple de la présentation:
Response
oublob.stream()
à StreamSaverVoici un exemple dans sa forme la plus simple:
Si vous souhaitez enregistrer un blob vous convertir un readableStream