1
22
23 package com.liferay.portlet.wiki.action;
24
25 import com.liferay.documentlibrary.service.DLLocalServiceUtil;
26 import com.liferay.portal.kernel.util.MimeTypesUtil;
27 import com.liferay.portal.kernel.util.ParamUtil;
28 import com.liferay.portal.kernel.util.StringPool;
29 import com.liferay.portal.model.CompanyConstants;
30 import com.liferay.portal.struts.ActionConstants;
31 import com.liferay.portal.struts.PortletAction;
32 import com.liferay.portal.util.PortalUtil;
33 import com.liferay.portlet.wiki.model.WikiPage;
34 import com.liferay.portlet.wiki.service.WikiPageServiceUtil;
35 import com.liferay.util.servlet.ServletResponseUtil;
36
37 import java.io.InputStream;
38
39 import javax.portlet.ActionRequest;
40 import javax.portlet.ActionResponse;
41 import javax.portlet.PortletConfig;
42
43 import javax.servlet.http.HttpServletRequest;
44 import javax.servlet.http.HttpServletResponse;
45
46 import org.apache.struts.action.ActionForm;
47 import org.apache.struts.action.ActionForward;
48 import org.apache.struts.action.ActionMapping;
49
50
56 public class GetPageAttachmentAction extends PortletAction {
57
58 public ActionForward strutsExecute(
59 ActionMapping mapping, ActionForm form, HttpServletRequest request,
60 HttpServletResponse response)
61 throws Exception {
62
63 try {
64 long nodeId = ParamUtil.getLong(request, "nodeId");
65 String title = ParamUtil.getString(request, "title");
66 String fileName = ParamUtil.getString(request, "fileName");
67
68 getFile(nodeId, title, fileName, request, response);
69
70 return null;
71 }
72 catch (Exception e) {
73 PortalUtil.sendError(e, request, response);
74
75 return null;
76 }
77 }
78
79 public void processAction(
80 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
81 ActionRequest actionRequest, ActionResponse actionResponse)
82 throws Exception {
83
84 try {
85 long nodeId = ParamUtil.getLong(actionRequest, "nodeId");
86 String title = ParamUtil.getString(actionRequest, "title");
87 String fileName = ParamUtil.getString(actionRequest, "fileName");
88
89 HttpServletRequest request = PortalUtil.getHttpServletRequest(
90 actionRequest);
91 HttpServletResponse response = PortalUtil.getHttpServletResponse(
92 actionResponse);
93
94 getFile(nodeId, title, fileName, request, response);
95
96 setForward(actionRequest, ActionConstants.COMMON_NULL);
97 }
98 catch (Exception e) {
99 PortalUtil.sendError(e, actionRequest, actionResponse);
100 }
101 }
102
103 protected void getFile(
104 long nodeId, String title, String fileName,
105 HttpServletRequest request, HttpServletResponse response)
106 throws Exception {
107
108 int pos = fileName.indexOf(StringPool.SLASH);
109
110 if (pos != -1) {
111 title = fileName.substring(0, pos);
112 fileName = fileName.substring(pos + 1);
113 }
114
115 InputStream is = null;
116
117 try {
118 WikiPage page = WikiPageServiceUtil.getPage(nodeId, title);
119
120 is = DLLocalServiceUtil.getFileAsStream(
121 page.getCompanyId(), CompanyConstants.SYSTEM,
122 page.getAttachmentsDir() + "/" + fileName);
123
124 String contentType = MimeTypesUtil.getContentType(fileName);
125
126 ServletResponseUtil.sendFile(response, fileName, is, contentType);
127 }
128 finally {
129 ServletResponseUtil.cleanUp(is);
130 }
131 }
132
133 protected boolean isCheckMethodOnProcessAction() {
134 return _CHECK_METHOD_ON_PROCESS_ACTION;
135 }
136
137 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
138
139 }