]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java
Stabilize attachments and events
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / attachment / GetAttachmentHandler.java
index b5ac9b5e65ccacf6ca8dda79a2c2267662e9128a..7591a7b5248ce57f49d3cd08344afe0220c0c1ae 100644 (file)
@@ -7,6 +7,8 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
 \r
+import org.apache.commons.io.FileUtils;\r
+import org.apache.commons.io.FilenameUtils;\r
 import org.argeo.slc.core.attachment.AttachmentsStorage;\r
 import org.argeo.slc.core.attachment.SimpleAttachment;\r
 import org.springframework.web.HttpRequestHandler;\r
@@ -23,20 +25,38 @@ public class GetAttachmentHandler implements HttpRequestHandler {
                String contentType = request.getParameter("contentType");\r
                String name = request.getParameter("name");\r
                if (contentType == null || "".equals(contentType.trim())) {\r
-                       contentType = FORCE_DOWNLOAD;\r
-               }\r
-\r
-               if (contentType.trim().equals(FORCE_DOWNLOAD)) {\r
                        if (name != null) {\r
-                               contentType = contentType + ";name=\"" + name + "\"";\r
-                               response.setHeader("Content-Disposition",\r
-                                               "attachment; filename=\"" + name + "\"");\r
+                               contentType = FORCE_DOWNLOAD;\r
+                               String ext = FilenameUtils.getExtension(name);\r
+                               // cf. http://en.wikipedia.org/wiki/Internet_media_type\r
+                               if ("csv".equals(ext))\r
+                                       contentType = "text/csv";\r
+                               else if ("pdf".equals(ext))\r
+                                       contentType = "application/pdf";\r
+                               else if ("zip".equals(ext))\r
+                                       contentType = "application/zip";\r
+                               else if ("html".equals(ext))\r
+                                       contentType = "application/html";\r
+                               else if ("txt".equals(ext))\r
+                                       contentType = "text/plain";\r
+                               else if ("doc".equals(ext) || "docx".equals(ext))\r
+                                       contentType = "application/msword";\r
+                               else if ("xls".equals(ext) || "xlsx".equals(ext))\r
+                                       contentType = "application/vnd.ms-excel";\r
+                               else if ("xml".equals(ext))\r
+                                       contentType = "text/xml";\r
                        }\r
-                       response.setHeader("Expires", "0");\r
-                       response.setHeader("Cache-Control", "no-cache, must-revalidate");\r
-                       response.setHeader("Pragma", "no-cache");\r
                }\r
 \r
+               if (name != null) {\r
+                       contentType = contentType + ";name=\"" + name + "\"";\r
+                       response.setHeader("Content-Disposition", "attachment; filename=\""\r
+                                       + name + "\"");\r
+               }\r
+               response.setHeader("Expires", "0");\r
+               response.setHeader("Cache-Control", "no-cache, must-revalidate");\r
+               response.setHeader("Pragma", "no-cache");\r
+\r
                SimpleAttachment resourceDescriptor = new SimpleAttachment();\r
                resourceDescriptor.setUuid(uuid);\r
                resourceDescriptor.setContentType(contentType);\r