2012-07-05 24 views
33

¿Cómo puedo hacer que un navegador muestre un "guardar como diálogo" para que el usuario pueda guardar el contenido de una cadena en un archivo en su sistema?¿Cómo hacer que un navegador muestre un "guardar como diálogo" para que el usuario pueda guardar el contenido de una cadena en un archivo en su sistema?

Por ejemplo:

var myString = "my string with some stuff"; 
save_to_filesystem(myString,"myString.txt"); 

Resultando en algo como esto:

Example

+0

Encontrará la respuesta aquí: http://stackoverflow.com/questions/2897619/using-html5-javascript-to-generate-and-save-a-file – demux

+0

@ArnarYngvason es el mismo proceso que esto en angularjs? – bleykFaust

+1

@bleykFaust, el procedimiento es el mismo en todas las aplicaciones frontend js. – demux

Respuesta

24

En caso de que alguien puede tener duda ...

lo hice así:

<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a>

puedo recordar mi fuente, pero utiliza las siguientes técnicas \ características:

  1. html5 descarga atributo
  2. de URI de datos

encontrado la referencia:

http://paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/


EDIT: Como se puede deducir de los comentarios de este hace NO trabajo en

  1. Internet Explorer (funciona en la versión 13 del borde embargo)
  2. Safari
  3. iOS Safari
  4. Opera Mini
  5. Navegador de Android (4.3 y menor)

http://caniuse.com/#feat=download

-5

Usando execComand:

<input type="button" name="save" value="Save" onclick="javascript:document.execCommand('SaveAs','true','your_file.txt')"> 

En el siguiente enlace: execCommand

+1

Lo sentimos, 'Guardar como' no es un comando definido. – Sablefoste

6

Hay una biblioteca de Javascript para esto, ver

Sin embargo, el saveAs() Función no enviará cadena puro para el navegador, es necesario convertirlo a blob:

function data2blob(data, isBase64) { 
    var chars = ""; 

    if (isBase64) 
    chars = atob(data); 
    else 
    chars = data; 

    var bytes = new Array(chars.length); 
    for (var i = 0; i < chars.length; i++) { 
    bytes[i] = chars.charCodeAt(i); 
    } 

    var blob = new Blob([new Uint8Array(bytes)]); 
    return blob; 
} 

y luego llamar saveAs de la burbuja, como como:

var myString = "my string with some stuff"; 
saveAs(data2blob(myString), "myString.txt"); 

Por supuesto, recuerde incluir la biblioteca javascript mencionada anteriormente en su página web usando <script src=FileSaver.js>

+4

Esto simplemente guarda "myString.txt" en mi carpeta de Descargas, sin mostrar un cuadro de diálogo. – meetar

+0

¡Ahh, no, no! Todos ellos guardan automáticamente. Entonces, ¿esto es siempre una función por navegador, o hay una forma de activar el comportamiento con un script? – meetar

+4

Creo que es una función por navegador. En Chrome, configúralo en la configuración, configuración avanzada, casilla de verificación "Preguntar dónde guardar cada archivo antes de descargar" –

9

Esto es posible utilizando esta implementación de JavaScript de navegador cruzado de la función HTML5 saveAs: https://github.com/koffsyrup/FileSaver.js

Si todo lo que quiere hacer es guardar texto, la secuencia de comandos anterior funciona en todos los navegadores (incluidas todas las versiones de IE), utilizando nada más que JS.

+3

fuerza la descarga en el navegador, no abre el cuadro de diálogo guardar – user889030

Cuestiones relacionadas