DownloadAttachmentAction.java

  1. package org.itracker.web.actions.admin.attachment;

  2. import org.apache.log4j.Logger;
  3. import org.apache.struts.action.*;
  4. import org.itracker.model.IssueAttachment;
  5. import org.itracker.services.IssueService;
  6. import org.itracker.web.actions.base.ItrackerBaseAction;
  7. import org.itracker.web.util.ServletContextUtils;
  8. import org.springframework.web.bind.ServletRequestUtils;

  9. import javax.servlet.ServletOutputStream;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;

  12. public class DownloadAttachmentAction extends ItrackerBaseAction {

  13.     private static final Logger log = Logger.getLogger(DownloadAttachmentAction.class);

  14.     public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request,
  15.                                  HttpServletResponse response) throws Exception {

  16.         Integer attachmentID = ServletRequestUtils.getIntParameter(request, "id");

  17.         IssueService issueService = ServletContextUtils.getItrackerServices().getIssueService();

  18.         IssueAttachment attachment = issueService.getIssueAttachment(attachmentID);

  19.         if (attachment.getFileData() == null) {
  20.             ActionMessages errors = new ActionMessages();

  21.             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.missingattachmentdata"));

  22.             saveErrors(request, errors);

  23.             return actionMapping.findForward("error_page");
  24.         }

  25.         response.setContentType(attachment.getType());
  26.         response.setHeader("Content-Disposition", "attachment; filename=" + attachment.getOriginalFileName() + "");
  27.         ServletOutputStream outputStream = response.getOutputStream();
  28.         log.debug("Displaying attachment " + attachment.getId() + " of type " + attachment.getType()
  29.                 + " to client.  Attachment size: " + attachment.getFileData().length);

  30.         outputStream.write(attachment.getFileData());

  31.         return null;

  32.     }

  33. }