import javax.servlet.http.HttpServletRequest;\r
import javax.servlet.http.HttpServletResponse;\r
\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
\r
/** Returns one single result. */\r
public class GetAttachmentHandler implements HttpRequestHandler {\r
+ protected final String FORCE_DOWNLOAD = "Content-Type: application/force-download";\r
+\r
private AttachmentsStorage attachmentsStorage;\r
\r
public void handleRequest(HttpServletRequest request,\r
HttpServletResponse response) throws ServletException, IOException {\r
String uuid = request.getParameter("uuid");\r
String contentType = request.getParameter("contentType");\r
+ String name = request.getParameter("name");\r
+ if (contentType == null || "".equals(contentType.trim())) {\r
+ if (name != null) {\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
+ }\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