2011-10-10 57 views
32

Estoy trabajando en un editor de texto en Javascript puro. Me gustaría que cuando el usuario haga clic en el botón "Guardar", el editor descargue el archivo. Ya tengo esto en parte trabajando:Guardar archivo Javascript con el nombre de archivo

uriContent = "data:application/octet-stream," + encodeURIComponent(codeMirror.getValue()); 
newWindow=window.open(uriContent, 'filename.txt'); 

Las descargas de archivos, pero el problema es que el archivo se llama 'Descargar'.

Pregunta: ¿Cómo podría cambiar el nombre del archivo para que sea lo que yo quiera, por ejemplo filename.txt?

+0

@zzzzBov pienso esta respuesta es mejor que la que se enlaza porque realmente muestra una solución para el problema planteado. – Deviljho

+0

@ AdriánSalgado, eso no hace que esta pregunta sea menos un duplicado, sin embargo ese voto cerrado ocurrió hace más de 2 años. Como puede ver, no hubo suficiente apoyo para cerrar realmente esta pregunta. Si crees que la otra pregunta debería tener una mejor respuesta, te recomiendo que agregues una. – zzzzBov

+0

¡Aún no parece una buena respuesta! ¡Es solo un pequeño agujero negro en el objeto de la ventana javascript, supongo! Tengo la misma preocupación: mi código va a abrir el archivo sobre la marcha que contiene el informe, pero el nombre del archivo no es lo que define mi código. No debería exigir al usuario que haga clic en un href y descargue el archivo. –

Respuesta

23

Reemplace su botón "Guardar" con un enlace de anclaje y establezca el nuevo atributo download dinámicamente. Funciona en Chrome y Firefox:

var d = "ha"; 
$(this).attr("href", "data:image/png;base64,abcdefghijklmnop").attr("download", "file-" + d + ".png"); 

Aquí está un ejemplo de trabajo con el nombre establecido como la fecha actual: http://jsfiddle.net/Qjvb3/

Aquí una tabla de compatibilidad para download atributo: http://caniuse.com/download

+1

descargar la compatibilidad del navegador de atributos http://caniuse.com/#feat=download – jcubic

+0

Como se indicó anteriormente, no se admiten atributos de descarga en Safari & IE. – LT86

5

utilizar la propiedad filename así:

uriContent = "data:application/octet-stream;filename=filename.txt," + 
       encodeURIComponent(codeMirror.getValue()); 
newWindow=window.open(uriContent, 'filename.txt'); 

EDIT:

Al parecer, no hay manera confiable de hacer esto. Ver: Is there any way to specify a suggested filename when using data: URI?

+0

Hmm, lo probé y todavía está descargando un archivo llamado 'descargar'. Esto es lo que mi código es ahora: 'uriContent =" data: application/octet-stream; filename = filename.txt, "+ encodeURIComponent (codeMirror.getValue()); newWindow = window.open (uriContent, 'filename.txt'); ' – skimberk1

+2

Parece que no funciona para las pruebas de navegador que he hecho en Firefox; ¿Es esta una función en un navegador diferente? [Wikipedia menciona que las URL de datos no pueden llevar nombres de archivos] (http://en.wikipedia.org/wiki/Data_URI_scheme#Disadvantages). – zzzzBov

+0

Hmm, bien, ¡gracias por la respuesta! – skimberk1

13
function saveAs(uri, filename) { 
    var link = document.createElement('a'); 
    if (typeof link.download === 'string') { 
     document.body.appendChild(link); // Firefox requires the link to be in the body 
     link.download = filename; 
     link.href = uri; 
     link.click(); 
     document.body.removeChild(link); // remove the link when done 
    } else { 
     location.replace(uri); 
    } 
} 
+0

Has salvado mi vida hermano. Gracias –

Cuestiones relacionadas