Estoy jugando con la idea de hacer una utilidad de descompresión / descompresión completamente basada en JavaScript a la que cualquiera pueda acceder desde un navegador. Simplemente pueden arrastrar su zip directamente al navegador y les permitirá descargar todos los archivos que contengan. También pueden crear nuevos archivos zip arrastrando archivos individuales.
Sé que sería mejor hacerlo en el servidor, pero este proyecto es solo por diversión.
Arrastrar archivos al navegador debería ser bastante fácil si aprovecho los diversos métodos disponibles. (Estilo Gmail)
La codificación / decodificación debería estar bien. He visto algunas bibliotecas as3 zip, así que estoy seguro de que debería estar bien con eso.
Mi problema es descargar los archivos al final.
window.location = 'data:jpg/image;base64,/9j/4AAQSkZJR....'
Esto funciona bien en Firefox pero no en Chrome.
Puedo incrustar los archivos como imágenes muy bien en Chrome usando <img src="data:jpg/image;ba.." />
, pero los archivos no serán necesariamente imágenes. Podrían ser de cualquier formato.
¿Alguien puede pensar en otra solución o algún tipo de solución?
fuente
Respuestas:
Ideas:
Prueba un
<a href="data:...." target="_blank">
(no probado)Utilice downloadify en lugar de URL de datos (también funcionaría para IE)
fuente
Si también desea dar un nombre sugerido al archivo (en lugar de la 'descarga' predeterminada) puede usar lo siguiente en Chrome, Firefox y algunas versiones de IE:
Y el siguiente ejemplo muestra su uso:
fuente
link.click()
lugar de sueventFire
función ... jsfiddle.net/ARTsinn/Ezx5mo:
fuente
Quiero compartir mi experiencia y ayudar a alguien atascado en las descargas que no funcionan en Firefox y la respuesta actualizada a 2014. El fragmento a continuación funcionará tanto en Firefox como en Chrome y aceptará un nombre de archivo:
fuente
download
atributo. Gracias de todos modos, esto es lo más cerca que puedo llegar en este momento.btoa
no está definido (por ejemplo, en el proyecto frontend de nodo eslinado)const btxt = new Buffer(text).toString('base64'); const uri = 'data:text/csv;charset=utf-8;base64,' + btxt + ';'
Aquí hay una solución de JavaScript pura que probé trabajando en Firefox y Chrome pero no en Internet Explorer:
Soluciones de navegador cruzado encontradas hasta ahora:
descargar -> Requiere Flash
databounce -> Probado en IE 10 y 11, y no funciona para mí. Requiere un servlet y algo de personalización. (Detecta incorrectamente el navegador. Tuve que configurar IE en modo de compatibilidad para probar, juego de caracteres predeterminado en servlet, objeto de opciones de JavaScript con ruta de servlet correcta para rutas absolutas ...) Para navegadores que no son IE, abre el archivo en la misma ventana.
download.js -> http://danml.com/download.html Otra biblioteca similar pero no probada. Afirma ser JavaScript puro, no requiere servlet ni Flash, pero no funciona en IE <= 9.
fuente
Existen varias soluciones, pero dependen de HTML5 y todavía no se han implementado completamente en algunos navegadores. Los ejemplos a continuación se probaron en Chrome y Firefox (en parte funciona).
document.location.href
en el URI de datos.<a href="your-data-uri" download="filename.txt">
para especificar el nombre del archivo.fuente
Combinando respuestas de @owencm y @ Chazt3n, esta función permitirá la descarga de texto de IE11, Firefox y Chrome. (Lo siento, no tengo acceso a Safari u Opera, pero agregue un comentario si lo intenta y funciona).
fuente
Para cualquiera que tenga problemas en IE:
Vota la respuesta aquí por Yetti: guardar el lienzo localmente en IE
fuente
Su problema esencialmente se reduce a "no todos los navegadores lo admitirán".
Podría probar una solución alternativa y servir los archivos descomprimidos de un objeto Flash, pero luego perdería la pureza de JS (de todos modos, no estoy seguro de si actualmente puede "arrastrar archivos al navegador" sin algún tipo de solución Flash) - ¿es esa una característica HTML5 tal vez?)
fuente