]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/runtime/org.argeo.eclipse.ui.rap/src/main/java/org/argeo/eclipse/ui/specific/DownloadServiceHandler.java
Add comments with some tips regarding header settings of the URL request header.
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.rap / src / main / java / org / argeo / eclipse / ui / specific / DownloadServiceHandler.java
1 package org.argeo.eclipse.ui.specific;
2
3 import java.io.IOException;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.http.HttpServletResponse;
7
8 import org.argeo.ArgeoException;
9 import org.eclipse.rwt.RWT;
10 import org.eclipse.rwt.service.IServiceHandler;
11
12 public class DownloadServiceHandler implements IServiceHandler {
13
14 private FileProvider provider;
15
16 public DownloadServiceHandler(FileProvider provider) {
17 this.provider = provider;
18 }
19
20 public void service() throws IOException, ServletException {
21 // Which file to download?
22 String fileName = RWT.getRequest().getParameter("filename");
23 String fileId = RWT.getRequest().getParameter("fileid");
24
25 // Get the file content
26 byte[] download = provider.getByteArrayFileFromId(fileId);
27
28 // Send the file in the response
29 HttpServletResponse response = RWT.getResponse();
30 response.setContentType("application/octet-stream");
31 response.setContentLength(download.length);
32 String contentDisposition = "attachment; filename=\"" + fileName + "\"";
33 response.setHeader("Content-Disposition", contentDisposition);
34
35 // Various header fields that can be set to solve some issues with some
36 // old browsers.
37 // Unused.
38 // String contentType = "application/force-download; name=\"" + fileName
39 // + "\"";
40 // response.setContentType(contentType);
41 // response.setHeader("Content-Transfer-Encoding", "binary");
42 // response.setHeader("Pragma", "no-cache");
43 // response.setHeader("Cache-Control", "no-cache, must-revalidate");
44 // response.setHeader("Expires", "0");
45 // response.setHeader("Connection", "Keep-Alive");
46 // response.setHeader("Keep-Alive", "timeout=5, max=86");
47 // response.setHeader("transfer-Encoding", "chunked");
48
49 try {
50 response.getOutputStream().write(download);
51 } catch (IOException ioe) {
52 throw new ArgeoException("Error while writing the file " + fileName
53 + " to the servlet response", ioe);
54 }
55 }
56 }