¿Cómo puede un usuario descargar un archivo en el lado del cliente (Google Web Toolkit)?

Estoy usando GWT (Google Web Toolkit) para hacer un sitio web. Necesito mostrarle una tabla al usuario y dejar que el usuario descargue el contenido de la tabla.

En el lado del cliente, ¿cómo puede un usuario descargar un archivo cuando presiona el botón “descargar”?

El botón “Descargar” tiene un oyente onClick() . Y la clase del lado del cliente extiende Composite .

Intenté que la clase extendiera HttpServlet , pero se vuelve demasiado complicado.

Ya leí publicaciones aquí:

  1. http://www.mkyong.com/java/how-to-download-file-from-website-java-jsp/
  2. ¿Cómo usar GWT al descargar archivos con un servlet?

Pero todavía no sé cómo puedo proporcionar un archivo descargable al usuario en el lado del cliente.

REALMENTE necesita distinguir entre el código Java del lado del cliente GWT y el código java del lado del servidor.

Del lado del cliente en tu código GWT Java

 String url = GWT.getModuleBaseURL() + "downloadService?fileInfo1=" + fileInfo1; Window.open( url, "_blank", "status=0,toolbar=0,menubar=0,location=0"); 

Del lado del servidor en su código Java no gwt

En web.xml

  downloadService AAA.BBB.CCC.DownloadServlet   downloadService //downloadService  

En el código del paquete del servidor, un servlet

  public class DownloadServlet extends HttpServlet{ protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { String fileName = req.getParameter( "fileInfo1" ); int BUFFER = 1024 * 100; resp.setContentType( "application/octet-stream" ); resp.setHeader( "Content-Disposition:", "attachment;filename=" + "\"" + fileName + "\"" ); ServletOutputStream outputStream = resp.getOutputStream(); resp.setContentLength( Long.valueOf( getfile(fileName).length() ).intValue() ); resp.setBufferSize( BUFFER ); //Your IO code goes here to create a file and set to outputStream// } } 

Asegúrese de insertar el contenido de su archivo en **outputStream** .

Si conoce la ruta del archivo, a continuación se muestra el fragmento de código.

 button.addClickHandler(new ClickHandler() { @Overrid public void onClick(ClickEvent event) { Window.open(GWT.getHostPageBaseURL() + "/file.rar", "name", "enabled"); } }); 

Puede probar ClientIO para leer y escribir archivos en el cliente con GWT

http://www.emitrom.com/blog/client-io

Para completar la respuesta del ítem número uno en la parte io …

puedes consultar este enlace

http://www.programcreek.com/2009/02/java-convert-a-file-to-byte-array-then-convert-byte-array-to-a-file/

o consulte este código

 File file = new File(enter the filepath here) FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; try { for (int readNum; (readNum = fis.read(buf)) != -1;) { bos.write(buf, 0, readNum); //no doubt here is 0 //Writes len bytes from the specified byte array starting at offset off to this byte array output stream. System.out.println("read " + readNum + " bytes,"); } } catch (IOException ex) { System.err.println("unable to convert to bytes"); } byte[] bytes = bos.toByteArray(); outputStream.write(bytes); outputStream.flush(); outputStream.close(); 

¡Espero eso ayude!