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=7591a7b5248ce57f49d3cd08344afe0220c0c1ae;hb=96f732785d5236ab435f6be5da3d53ba66c9b86d;hp=b5ac9b5e65ccacf6ca8dda79a2c2267662e9128a;hpb=db0ede45244727bf0a33f23e3e9cc6a6e7f21418;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 b5ac9b5e6..7591a7b52 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,6 +7,8 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.FileUtils; +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; @@ -23,20 +25,38 @@ public class GetAttachmentHandler implements HttpRequestHandler { String contentType = request.getParameter("contentType"); String name = request.getParameter("name"); if (contentType == null || "".equals(contentType.trim())) { - contentType = FORCE_DOWNLOAD; - } - - if (contentType.trim().equals(FORCE_DOWNLOAD)) { if (name != null) { - contentType = contentType + ";name=\"" + name + "\""; - response.setHeader("Content-Disposition", - "attachment; filename=\"" + name + "\""); + 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"; } - response.setHeader("Expires", "0"); - response.setHeader("Cache-Control", "no-cache, must-revalidate"); - response.setHeader("Pragma", "no-cache"); } + 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);