Existe-t-il un moyen de créer un fichier texte côté client et d'inviter l'utilisateur à le télécharger, sans aucune interaction avec le serveur? Je sais que je ne peux pas écrire directement sur leur machine (sécurité et tout), mais puis-je créer et leur demander de l'enregistrer?
javascript
file
web-applications
client-side
Joseph Silber
la source
la source
Réponses:
Vous pouvez utiliser des URI de données. La prise en charge du navigateur varie; voir Wikipedia . Exemple:
Le flux d'octets doit forcer une invite de téléchargement. Sinon, il s'ouvrira probablement dans le navigateur.
Pour CSV, vous pouvez utiliser:
Essayez la démo jsFiddle .
la source
Solution simple pour les navigateurs compatibles HTML5 ...
Usage
la source
download
attribut, vous pouvez spécifier le nom du fichier ;-)txt
extension si vous ne fournissez pas d'extension dans le nom de fichier. Si vous le faites,download("data.json", data)
cela fonctionnera comme prévu.Toutes les solutions ci-dessus ne fonctionnaient pas dans tous les navigateurs. Voici ce qui fonctionne finalement sur IE 10+, Firefox et Chrome (et sans jQuery ni aucune autre bibliothèque):
Notez que, selon votre situation, vous pouvez également appeler URL.revokeObjectURL après la suppression
elem
. Selon les documents pour URL.createObjectURL :la source
Failed: network error
dans Chrome. Celui-ci fonctionne bien.Tous les exemples ci-dessus fonctionnent très bien dans Chrome et IE, mais échouent dans Firefox. Veuillez envisager d'ajouter une ancre au corps et de la retirer après avoir cliqué.
la source
a.click()
ligne car il pense que l'URL de blob est d'origine croisée.J'utilise volontiers FileSaver.js . Sa compatibilité est assez bonne (IE10 + et tout le reste), et il est très simple à utiliser:
la source
<a>
.La méthode suivante fonctionne dans IE11 +, Firefox 25+ et Chrome 30+:
Voir ceci en action: http://jsfiddle.net/Kg7eA/
Firefox et Chrome prennent en charge l'URI de données pour la navigation, ce qui nous permet de créer des fichiers en naviguant vers un URI de données, tandis qu'IE ne le prend pas en charge à des fins de sécurité.
D'un autre côté, IE a une API pour enregistrer un blob, qui peut être utilisée pour créer et télécharger des fichiers.
la source
Cette solution est extraite directement du référentiel github de tiddlywiki (tiddlywiki.com). J'ai utilisé tiddlywiki dans presque tous les navigateurs et cela fonctionne comme un charme:
Repo Github: Télécharger le module d'économiseur
la source
Solution qui fonctionne sur IE10: (j'avais besoin d'un fichier csv, mais il suffit de changer le type et le nom de fichier en txt)
la source
Si vous voulez simplement convertir une chaîne pour qu'elle soit disponible en téléchargement, vous pouvez essayer ceci en utilisant jQuery.
la source
Le package js-file-download depuis github.com/kennethjiang/js-file-download gère les cas marginaux pour la prise en charge du navigateur:
Voir la source pour voir comment il utilise les techniques mentionnées sur cette page.
Installation
Usage
la source
Comme mentionné précédemment, l' économiseur de fichiers est un excellent package pour travailler avec des fichiers côté client. Mais ce n'est pas bien avec les gros fichiers. StreamSaver.js est une solution alternative (indiquée dans FileServer.js) qui peut gérer des fichiers volumineux:
la source
la source
Depuis avril 2014, les API FileSytem peuvent ne pas être standardisées dans le W3C. Quiconque regarde la solution avec blob devrait fileter avec prudence, je suppose.
HTML5 prend la tête
Liste de diffusion W3C sur l'API FileSytem
la source
Sur la base de la réponse @Rick qui a été vraiment utile.
Vous devez scape la chaîne
data
si vous souhaitez la partager de cette façon:`Désolé, je ne peux pas commenter la réponse de @ Rick en raison de ma faible réputation actuelle dans StackOverflow.
Une suggestion de modification a été partagée et rejetée.
la source
Nous pouvons utiliser l' API URL , en particulier URL.createObjectURL () , et l' API Blob pour encoder et télécharger à peu près n'importe quoi.
Si votre téléchargement est petit, cela fonctionne bien:
Si votre téléchargement est énorme, au lieu d'utiliser le DOM, une meilleure façon est de créer un élément de lien avec les paramètres de téléchargement et de déclencher un clic.
Notez que l'élément de lien n'est pas ajouté au document mais le clic fonctionne quand même! Il est possible de créer un téléchargement de plusieurs centaines de Mo de cette façon.
Prime! Téléchargez tous les objets cycliques , évitez les erreurs:
En utilisant https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
Sur cet exemple, le téléchargement du
document
objet en tant que json.la source
Vous pouvez même faire mieux que les URI - en utilisant Chrome, vous pouvez également suggérer le nom que le fichier prendra, comme expliqué dans ce billet de blog sur le nom d'un téléchargement lors de l'utilisation d'URI .
la source
Cette fonction ci-dessous a fonctionné.
la source
La méthode suivante fonctionne dans IE10 +, Edge, Opera, FF et Chrome:
Alors, appelez simplement la fonction:
la source
Pour moi, cela fonctionnait parfaitement, avec le même nom de fichier et la même extension téléchargés
<a href={"data:application/octet-stream;charset=utf-16le;base64," + file64 } download={title} >{title}</a>
'title' est le nom de fichier avec l' extension c. -à-
sample.pdf
,waterfall.jpg
, etc ..'file64' est le contenu base64 quelque chose comme ça, c'est-à-dire
Ww6IDEwNDAsIFNsaWRpbmdTY2FsZUdyb3VwOiAiR3JvdXAgQiIsIE1lZGljYWxWaXNpdEZsYXRGZWU6IDM1LCBEZW50YWxQYXltZW50UGVyY2VudGFnZTogMjUsIFByb2NlZHVyZVBlcmNlbnQ6IDcwLKCFfSB7IkdyYW5kVG90YWwiOjEwNDAsIlNsaWRpbmdTY2FsZUdyb3VwIjoiR3JvdXAgQiIsIk1lZGljYWxWaXNpdEZsYXRGZWUiOjM1LCJEZW50YWxQYXltZW50UGVyY2VudGFnZSI6MjUsIlByb2NlZHVyZVBlcmNlbnQiOjcwLCJDcmVhdGVkX0J5IjoiVGVycnkgTGVlIiwiUGF0aWVudExpc3QiOlt7IlBhdGllbnRO
la source
J'utiliserais une
<a></a>
balise puis définirais lehref='path'
. Ensuite, placez une image entre les<a>
éléments afin que je puisse avoir un visuel pour la voir. Si vous le souhaitez, vous pouvez créer une fonction qui changera lehref
afin que ce ne soit plus seulement le même lien mais dynamique.Donnez également
<a>
une baliseid
si vous souhaitez y accéder avec javascript.À partir de la version HTML:
Maintenant avec JavaScript:
la source
Si le fichier contient des données textuelles, une technique que j'utilise est de placer le texte dans un élément textarea et de le faire sélectionner par l'utilisateur (cliquez dans textarea puis ctrl-A) puis copiez puis collez-le dans un éditeur de texte.
la source