1 package org
.argeo
.slc
.web
.ajaxplorer
.file
;
4 import java
.io
.InputStream
;
5 import java
.io
.OutputStream
;
7 import javax
.servlet
.http
.HttpServletRequest
;
8 import javax
.servlet
.http
.HttpServletResponse
;
10 import org
.apache
.commons
.io
.FileUtils
;
11 import org
.apache
.commons
.io
.IOUtils
;
12 import org
.argeo
.slc
.web
.ajaxplorer
.AjxpAnswer
;
13 import org
.argeo
.slc
.web
.ajaxplorer
.AjxpDriverException
;
15 public abstract class AbstractFileDownloadAction
extends FileAction
{
16 public AjxpAnswer
execute(FileDriver driver
, HttpServletRequest request
) {
17 String fileStr
= request
.getParameter(getFileParameter());
18 if (fileStr
== null) {
19 throw new AjxpDriverException(
20 "A file to download needs to be provided.");
22 File file
= new File(driver
.getBasePath() + fileStr
);
23 return new AxpBasicDownloadAnswer(file
);
26 /** Return 'file' by default. */
27 protected String
getFileParameter() {
31 /** To be overridden. Do nothing by default. */
32 protected void setHeaders(HttpServletResponse response
, File file
) {
36 protected class AxpBasicDownloadAnswer
implements AjxpAnswer
{
37 private final File file
;
39 public AxpBasicDownloadAnswer(File file
) {
43 public void updateResponse(HttpServletResponse response
) {
44 InputStream in
= null;
45 OutputStream out
= null;
47 setHeaders(response
, file
);
49 if (log
.isDebugEnabled())
50 log
.debug("Download file " + file
);
51 in
= FileUtils
.openInputStream(file
);
52 out
= response
.getOutputStream();
57 } catch (Exception e
) {
59 throw new AjxpDriverException("Cannot download file " + file
, e
);
61 IOUtils
.closeQuietly(in
);
62 IOUtils
.closeQuietly(out
);
67 protected void copyFile(InputStream in
, OutputStream out
)
69 IOUtils
.copy(in
, out
);