X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.server%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fweb%2Fmvc%2Fattachment%2FGetAttachmentHandler.java;h=caeb68b0eb6a59d7b6ad4782d365ec2ca8f198e8;hb=fa2e3ec17c8f7168927cd1b4f2068776206a49e7;hp=77a21ae319825f3ac1682cbc2665c08aa898e9e2;hpb=44dd5750650b46d9979b4e06e4cc76c0b0003f4f;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java index 77a21ae31..caeb68b0e 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java @@ -7,18 +7,55 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.FilenameUtils; import org.argeo.slc.core.attachment.AttachmentsStorage; import org.argeo.slc.core.attachment.SimpleAttachment; import org.springframework.web.HttpRequestHandler; /** Returns one single result. */ public class GetAttachmentHandler implements HttpRequestHandler { + protected final String FORCE_DOWNLOAD = "Content-Type: application/force-download"; + private AttachmentsStorage attachmentsStorage; public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uuid = request.getParameter("uuid"); String contentType = request.getParameter("contentType"); + String name = request.getParameter("name"); + if (contentType == null || "".equals(contentType.trim())) { + if (name != null) { + contentType = FORCE_DOWNLOAD; + String ext = FilenameUtils.getExtension(name); + // cf. http://en.wikipedia.org/wiki/Internet_media_type + if ("csv".equals(ext)) + contentType = "text/csv"; + else if ("pdf".equals(ext)) + contentType = "application/pdf"; + else if ("zip".equals(ext)) + contentType = "application/zip"; + else if ("html".equals(ext)) + contentType = "application/html"; + else if ("txt".equals(ext)) + contentType = "text/plain"; + else if ("doc".equals(ext) || "docx".equals(ext)) + contentType = "application/msword"; + else if ("xls".equals(ext) || "xlsx".equals(ext)) + contentType = "application/vnd.ms-excel"; + else if ("xml".equals(ext)) + contentType = "text/xml"; + } + } + + if (name != null) { + contentType = contentType + ";name=\"" + name + "\""; + response.setHeader("Content-Disposition", "attachment; filename=\"" + + name + "\""); + } + response.setHeader("Expires", "0"); + response.setHeader("Cache-Control", "no-cache, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + SimpleAttachment resourceDescriptor = new SimpleAttachment(); resourceDescriptor.setUuid(uuid); resourceDescriptor.setContentType(contentType);