1 package org
.argeo
.eclipse
.ui
.specific
;
3 import java
.io
.IOException
;
5 import javax
.servlet
.ServletException
;
6 import javax
.servlet
.http
.HttpServletResponse
;
8 import org
.argeo
.ArgeoException
;
9 import org
.eclipse
.rwt
.RWT
;
10 import org
.eclipse
.rwt
.service
.IServiceHandler
;
12 public class DownloadServiceHandler
implements IServiceHandler
{
14 private FileProvider provider
;
16 public DownloadServiceHandler(FileProvider provider
) {
17 this.provider
= provider
;
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");
25 // Get the file content
26 byte[] download
= provider
.getByteArrayFileFromId(fileId
);
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
);
35 // Various header fields that can be set to solve some issues with some
38 // String contentType = "application/force-download; name=\"" + fileName
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");
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
);