¿Hay alguna forma de crear un archivo de texto en el lado del cliente y pedirle al usuario que lo descargue, sin ninguna interacción con el servidor? Sé que no puedo escribir directamente en su máquina (seguridad y todo), pero ¿puedo crear y pedirles que la guarden?
javascript
file
web-applications
client-side
Joseph Silber
fuente
fuente
Respuestas:
Puede usar URI de datos. El soporte del navegador varía; ver Wikipedia . Ejemplo:
El flujo de octetos es forzar una solicitud de descarga. De lo contrario, probablemente se abrirá en el navegador.
Para CSV, puede usar:
Prueba la demo jsFiddle .
fuente
Solución simple para navegadores listos para HTML5 ...
Uso
fuente
download
atributo puede especificar el nombre del archivo ;-)txt
extensión si no proporciona una extensión en el nombre del archivo. Si lo hacesdownload("data.json", data)
, funcionará como se espera.Todas las soluciones anteriores no funcionaron en todos los navegadores. Esto es lo que finalmente funciona en IE 10+, Firefox y Chrome (y sin jQuery o cualquier otra biblioteca):
Tenga en cuenta que, según su situación, también puede llamar a URL.revokeObjectURL después de eliminarlo
elem
. Según los documentos para URL.createObjectURL :fuente
Failed: network error
en Chrome. Este funciona bien.Todo el ejemplo anterior funciona bien en Chrome e IE, pero falla en Firefox. Considere agregar un ancla al cuerpo y eliminarlo después de hacer clic.
fuente
a.click()
línea porque cree que la URL del blob es de origen cruzado.Estoy feliz de usar FileSaver.js . Su compatibilidad es bastante buena (IE10 + y todo lo demás), y es muy simple de usar:
fuente
<a>
.El siguiente método funciona en IE11 +, Firefox 25+ y Chrome 30+:
Vea esto en acción: http://jsfiddle.net/Kg7eA/
Firefox y Chrome admiten URI de datos para la navegación, lo que nos permite crear archivos navegando a un URI de datos, mientras que IE no lo admite por motivos de seguridad.
Por otro lado, IE tiene una API para guardar un blob, que se puede usar para crear y descargar archivos.
fuente
Esta solución se extrae directamente del repositorio github de tiddlywiki (tiddlywiki.com). He usado tiddlywiki en casi todos los navegadores y funciona de maravilla:
Repositorio de Github: descargar el módulo de ahorro
fuente
Solución que funciona en IE10: (necesitaba un archivo csv, pero es suficiente para cambiar el tipo y el nombre de archivo a txt)
fuente
Si solo desea convertir una cadena para que esté disponible para descargar, puede probar esto usando jQuery.
fuente
El paquete js-file-download de github.com/kennethjiang/js-file-download maneja casos extremos para el soporte del navegador:
Vea la fuente para ver cómo usa las técnicas mencionadas en esta página.
Instalación
Uso
fuente
Como se mencionó anteriormente, el protector de archivos es un excelente paquete para trabajar con archivos en el lado del cliente. Pero, no le va bien con archivos grandes. StreamSaver.js es una solución alternativa (que se señala en FileServer.js) que puede manejar archivos grandes:
fuente
fuente
A partir de abril de 2014, las API de FileSytem pueden no estar estandarizadas en W3C. Supongo que cualquier persona que busque la solución con blob debería tratar con precaución.
HTML5 rocas cabezas arriba
Lista de correo W3C en API FileSytem
fuente
Basado en la respuesta de @Rick, que fue realmente útil.
Tienes que escapar de la cadena
data
si quieres compartirla de esta manera:`Lo siento, no puedo comentar sobre la respuesta de @ Rick debido a mi baja reputación actual en StackOverflow.
Una sugerencia de edición fue compartida y rechazada.
fuente
Podemos utilizar la dirección URL de la API, en particular, URL.createObjectURL () , y el Blob API para codificar y descarga casi cualquier cosa.
Si su descarga es pequeña, esto funciona bien:
Si su descarga es enorme, en lugar de usar el DOM, una mejor manera es crear un elemento de enlace con los parámetros de descarga y activar un clic.
¡Observe que el elemento de enlace no se agrega al documento, pero el clic funciona de todos modos! Esto es posible para crear una descarga de muchos cientos de Mo de esta manera.
¡Prima! Descargue cualquier objeto cíclico , evite los errores:
Usando https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
En este ejemplo, descargando el
document
objeto como json.fuente
Incluso puede hacer uno mejor que solo los URI: con Chrome también puede sugerir el nombre que tomará el archivo, como se explica en esta publicación de blog sobre cómo nombrar una descarga cuando se usan URI .
fuente
Esta siguiente función funcionó.
fuente
El siguiente método funciona en IE10 +, Edge, Opera, FF y Chrome:
Entonces, solo llame a la función:
fuente
Para mí, esto funcionó perfectamente, con el mismo nombre de archivo y extensión descargándose
<a href={"data:application/octet-stream;charset=utf-16le;base64," + file64 } download={title} >{title}</a>
'título' es el nombre del archivo con la extensión es decir,
sample.pdf
,waterfall.jpg
, etc ..'file64' es el contenido de base64 algo como esto, es decir,
Ww6IDEwNDAsIFNsaWRpbmdTY2FsZUdyb3VwOiAiR3JvdXAgQiIsIE1lZGljYWxWaXNpdEZsYXRGZWU6IDM1LCBEZW50YWxQYXltZW50UGVyY2VudGFnZTogMjUsIFByb2NlZHVyZVBlcmNlbnQ6IDcwLKCFfSB7IkdyYW5kVG90YWwiOjEwNDAsIlNsaWRpbmdTY2FsZUdyb3VwIjoiR3JvdXAgQiIsIk1lZGljYWxWaXNpdEZsYXRGZWUiOjM1LCJEZW50YWxQYXltZW50UGVyY2VudGFnZSI6MjUsIlByb2NlZHVyZVBlcmNlbnQiOjcwLCJDcmVhdGVkX0J5IjoiVGVycnkgTGVlIiwiUGF0aWVudExpc3QiOlt7IlBhdGllbnRO
fuente
Usaría una
<a></a>
etiqueta y luego establecería elhref='path'
. Luego, coloque una imagen entre los<a>
elementos para que pueda tener una imagen visual para verla. Si lo desea, puede crear una función que cambie la funciónhref
para que no solo sea el mismo enlace, sino que sea dinámica.Dele también la
<a>
etiquetaid
si desea acceder a ella con javascript.Comenzando con la versión HTML:
Ahora con JavaScript:
fuente
Si el archivo contiene datos de texto, una técnica que uso es colocar el texto en un elemento de área de texto y hacer que el usuario lo seleccione (haga clic en área de texto y luego ctrl-A) y luego copie y pegue en un editor de texto.
fuente