Creación y descarga de archivos del lado del cliente

Estamos utilizando fusioncharts y tiene la capacidad de usar javascript en el lado del cliente para exportar datos csv, queremos poder tomar esos datos y crear un archivo sobre la marcha en el navegador. ¿es eso posible? ¿Cómo?

no tiene forma de tocar el disco local con Javascript por diseño.

Creo que podrías pasar todo el conjunto de datos desde javascript al código del lado del servidor (php, asp.net, java …) y luego podrías transmitirlo al navegador de alguna manera.

Pruebe a continuación el código que le permite acceder al sistema de archivos del lado del cliente, pero esto funciona solo en el navegador IE

   Get the size for the file "test.txt" 

Eche un vistazo a filesaver.js . Siempre que esté de acuerdo con IE10 +, esta es una solución bastante sólida que se maneja con elegancia utilizando el mejor método según el navegador.

Dado que la respuesta de Marc fue (estúpidamente) convertida en un comentario, y ninguna de las otras respuestas realmente responde la pregunta, aquí está la respuesta:

 Click me to DL something  

Esto se derivó de la respuesta a la que se hace referencia en Marc, que es útil en situaciones en las que no hace clic específicamente en una etiqueta de enlace: https://stackoverflow.com/a/3665147/279255

 // must be called in a click handler or some other user action function download(filename, text) { var element = document.createElement('a'); element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); element.setAttribute('download', filename); element.style.display = 'none'; document.body.appendChild(element); element.click(); document.body.removeChild(element); } 

Le sugiero que no cree un archivo localmente en el lado del cliente, sino que solicite al usuario (cuadro de diálogo Guardar como) que descargue los datos generados del lado del cliente en la ubicación que desea.

La solución para descargar contenido local / del lado del cliente a través de javascript no es sencillo. Implementé una solución usando smartclient-html-jsp.

Aquí está la solución:

  1. Estoy en la comstackción del proyecto en SmartClient. Necesitamos descargar / exportar datos de una grilla (estructura similar a una tabla).
  2. Estábamos utilizando servicios web RESTish para servir los datos desde el lado del servidor. Así que no pude golpear la url dos veces; uno para la red y la segunda vez para exportar / transformar los datos para descargar.
  3. Lo que hice fue hacer dos JSP, a saber: blank.jsp y export.jsp.
  4. blank.jsp está literalmente en blanco, ahora necesito exportar los datos de la cuadrícula que ya tengo en el lado del cliente.
  5. Ahora, cuando el usuario solicite exportar los datos de la grilla, lo hago a continuación:
    1. Abra una nueva ventana con url blank.jsp
    2. using document.write Creo un formulario en él con un texto de nombre de campo y establezco los datos para exportar dentro de él.
    3. Ahora POST esa forma de export.jsp de la misma jerarquía.
    4. El contenido de export.jsp que estoy pegando a continuación se explica por sí mismo.
 <%@ page import="java.util.*,java.io.*,java.util.Enumeration"%> <% response.setContentType ("text/csv"); //set the header and also the Name by which user will be prompted to save response.setHeader ("Content-Disposition", "attachment;filename=\"data.csv\""); String contents = request.getParameter ("text"); if (!(contents!= null && contents!="")) contents = "No data"; else contents = contents.replaceAll ("NEW_LINE", "\n"); //Open an input stream to the file and post the file contents thru the //servlet output stream to the client m/c InputStream in = new ByteArrayInputStream(contents.getBytes ()); ServletOutputStream outs = response.getOutputStream(); int bit = 256; int i = 0; try { while ((bit) >= 0) { bit = in.read(); outs.write(bit); } //System.out.println("" +bit); } catch (IOException ioe) { ioe.printStackTrace(System.out); } outs.flush(); outs.close(); in.close(); %>        

Este código se prueba y se implementa / funciona en el entorno de producción, también se trata de una funcionalidad de navegador cruzado.