Reputation: 283
I need to implement file download .I don't want give any server side file urls to download directly .I created a servlet which will open the file and write it to stream of response.Now coming to front gwt i have onResponseReceived(Request request, Response response) which will be called on receiving the response .Now how to proceed further? .My operation required is ,file in stream should be downloaded to client computer.
can one help me regarding this ?
Upvotes: 0
Views: 6016
Reputation: 15689
You can do that without the servlet, using just GWT RPC and Data URIs:
Window.open
to open a file save dialog passing the formatted DataURI.Take a look at this reference, to understand the Data URI usage:
Upvotes: 0
Reputation:
You could use any of _blank, _parent, _top, _self
Upvotes: 2
Reputation: 4250
Did you try Window.open(ServletUrl, "_parent", "location=no")
?
And try setting the ContentType in the response to "application/exe"
This will prompt user to save or run.
Servlet Code:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8");
File file = new File("/path/to/files", filename);
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
response.setHeader("Content-Length", file.length());
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(file));
output = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[8192];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
} finally {
if (output != null) try { output.close(); } catch (IOException ignore) {}
if (input != null) try { input.close(); } catch (IOException ignore) {}
}
}
Upvotes: 2