I\'m using GWT(Google Web Toolkit) to make a website. I need to show a table to the user, and let the user download the contents of the table.
On the client side, h
If you know the path of the file, Code snippet is shown below.
button.addClickHandler(new ClickHandler()
{
@Overrid
public void onClick(ClickEvent event)
{
Window.open(GWT.getHostPageBaseURL() + "/file.rar", "name", "enabled");
}
});
You REALLY need to distinguish between GWT client side java code and server side java code.
On the client side in your GWT Java Code
String url = GWT.getModuleBaseURL() + "downloadService?fileInfo1=" + fileInfo1;
Window.open( url, "_blank", "status=0,toolbar=0,menubar=0,location=0");
On server side in your non-gwt Java code-
In web.xml
<servlet>
<servlet-name>downloadService</servlet-name>
<servlet-class>AAA.BBB.CCC.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>downloadService</servlet-name>
<url-pattern>/<gwtmodulename>/downloadService</url-pattern>
</servlet-mapping>
In server package code a 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//
}
}
Ensure you push your file contents to **outputStream**
.
To complete the answer of number one item in the io part...
you can refer to this link
http://www.programcreek.com/2009/02/java-convert-a-file-to-byte-array-then-convert-byte-array-to-a-file/
or refer to this code
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();
hope it helps!
You can try ClientIO to read and write files on the client with GWT
http://www.emitrom.com/blog/client-io