]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java
Make attachments more robusts
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / attachment / GetAttachmentHandler.java
1 package org.argeo.slc.web.mvc.attachment;
2
3 import java.io.IOException;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.ServletOutputStream;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import org.argeo.slc.core.attachment.AttachmentsStorage;
11 import org.argeo.slc.core.attachment.SimpleAttachment;
12 import org.springframework.web.HttpRequestHandler;
13
14 /** Returns one single result. */
15 public class GetAttachmentHandler implements HttpRequestHandler {
16 protected final String FORCE_DOWNLOAD = "Content-Type: application/force-download";
17
18 private AttachmentsStorage attachmentsStorage;
19
20 public void handleRequest(HttpServletRequest request,
21 HttpServletResponse response) throws ServletException, IOException {
22 String uuid = request.getParameter("uuid");
23 String contentType = request.getParameter("contentType");
24 String name = request.getParameter("name");
25 if (contentType == null || "".equals(contentType.trim())) {
26 contentType = FORCE_DOWNLOAD;
27 }
28
29 if (contentType.trim().equals(FORCE_DOWNLOAD)) {
30 if (name != null) {
31 contentType = contentType + ";name=\"" + name + "\"";
32 response.setHeader("Content-Disposition",
33 "attachment; filename=\"" + name + "\"");
34 }
35 response.setHeader("Expires", "0");
36 response.setHeader("Cache-Control", "no-cache, must-revalidate");
37 response.setHeader("Pragma", "no-cache");
38 }
39
40 SimpleAttachment resourceDescriptor = new SimpleAttachment();
41 resourceDescriptor.setUuid(uuid);
42 resourceDescriptor.setContentType(contentType);
43
44 response.setContentType(contentType);
45 ServletOutputStream outputStream = response.getOutputStream();
46 attachmentsStorage.retrieveAttachment(resourceDescriptor, outputStream);
47 }
48
49 public void setAttachmentsStorage(AttachmentsStorage attachmentsStorage) {
50 this.attachmentsStorage = attachmentsStorage;
51 }
52
53 }