Advertisement
Guest User

Untitled

a guest
Jun 30th, 2015
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.96 KB | None | 0 0
  1. <s:form namespace="/admin_side"
  2. action="Category"
  3. enctype="multipart/form-data"
  4. method="POST"
  5. validate="true"
  6. id="dataForm"
  7. name="dataForm">
  8.  
  9. <s:hidden name="%{#attr._csrf.parameterName}"
  10. value="%{#attr._csrf.token}"/>
  11. </s:form>
  12.  
  13. <?xml version="1.0" encoding="UTF-8"?>
  14. <web-app version="3.0"
  15. xmlns="http://java.sun.com/xml/ns/javaee"
  16. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  17. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  18. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  19.  
  20. <context-param>
  21. <param-name>contextConfigLocation</param-name>
  22. <param-value>
  23. /WEB-INF/applicationContext.xml
  24. /WEB-INF/spring-security.xml
  25. </param-value>
  26. </context-param>
  27.  
  28. <filter>
  29. <filter-name>MultipartFilter</filter-name>
  30. <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
  31. </filter>
  32.  
  33. <filter>
  34. <filter-name>springSecurityFilterChain</filter-name>
  35. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  36. </filter>
  37.  
  38. <filter-mapping>
  39. <filter-name>MultipartFilter</filter-name>
  40. <url-pattern>/*</url-pattern>
  41. </filter-mapping>
  42.  
  43. <filter-mapping>
  44. <filter-name>springSecurityFilterChain</filter-name>
  45. <url-pattern>/*</url-pattern>
  46. </filter-mapping>
  47.  
  48. <filter>
  49. <filter-name>AdminLoginNocacheFilter</filter-name>
  50. <filter-class>filter.AdminLoginNocacheFilter</filter-class>
  51. </filter>
  52.  
  53. <filter-mapping>
  54. <filter-name>AdminLoginNocacheFilter</filter-name>
  55. <url-pattern>/admin_login/*</url-pattern>
  56. </filter-mapping>
  57.  
  58. <filter>
  59. <filter-name>NoCacheFilter</filter-name>
  60. <filter-class>filter.NoCacheFilter</filter-class>
  61. </filter>
  62. <filter-mapping>
  63. <filter-name>NoCacheFilter</filter-name>
  64. <url-pattern>/admin_side/*</url-pattern>
  65. </filter-mapping>
  66.  
  67. <listener>
  68. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  69. </listener>
  70.  
  71. <listener>
  72. <description>Description</description>
  73. <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  74. </listener>
  75.  
  76. <listener>
  77. <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
  78. </listener>
  79.  
  80. <filter>
  81. <filter-name>struts2</filter-name>
  82. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  83. <init-param>
  84. <param-name>struts.devMode</param-name>
  85. <param-value>true</param-value>
  86. </init-param>
  87. </filter>
  88.  
  89. <filter-mapping>
  90. <filter-name>struts2</filter-name>
  91. <url-pattern>/*</url-pattern>
  92. </filter-mapping>
  93.  
  94. <session-config>
  95. <session-timeout>
  96. 30
  97. </session-timeout>
  98. </session-config>
  99. <welcome-file-list>
  100. <welcome-file>index.jsp</welcome-file>
  101. </welcome-file-list>
  102. </web-app>
  103.  
  104. <bean id="filterMultipartResolver"
  105. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  106.  
  107. <property name="maxUploadSize" value="-1" />
  108. </bean>
  109.  
  110. @Namespace("/admin_side")
  111. @ResultPath("/WEB-INF/content")
  112. @ParentPackage(value="struts-default")
  113. public final class CategoryAction extends ActionSupport implements Serializable, ValidationAware, ModelDriven<Category>
  114. {
  115. private File fileUpload;
  116. private String fileUploadContentType;
  117. private String fileUploadFileName;
  118. private static final long serialVersionUID = 1L;
  119.  
  120. //Getters and setters.
  121.  
  122. //Necessary validators as required.
  123. @Action(value = "AddCategory",
  124. results = {
  125. @Result(name=ActionSupport.SUCCESS, type="redirectAction", params={"namespace", "/admin_side", "actionName", "Category"}),
  126. @Result(name = ActionSupport.INPUT, location = "Category.jsp")},
  127. interceptorRefs={
  128. @InterceptorRef(value="defaultStack", "validation.validateAnnotatedMethodOnly", "true"})
  129. })
  130. public String insert(){
  131. //fileUpload, fileUploadContentType and fileUploadFileName are null here after the form is submitted.
  132. return ActionSupport.SUCCESS;
  133. }
  134.  
  135. @Action(value = "Category",
  136. results = {
  137. @Result(name=ActionSupport.SUCCESS, location="Category.jsp"),
  138. @Result(name = ActionSupport.INPUT, location = "Category.jsp")},
  139. interceptorRefs={
  140. @InterceptorRef(value="defaultStack", params={ "validation.validateAnnotatedMethodOnly", "true", "validation.excludeMethods", "load"})})
  141. public String load() throws Exception{
  142. //This method is just required to return an initial view on page load.
  143. return ActionSupport.SUCCESS;
  144. }
  145. }
  146.  
  147. <s:form namespace="/admin_side"
  148. action="Category?%{#attr._csrf.parameterName}=%{#attr._csrf.token}"
  149. enctype="multipart/form-data"
  150. method="POST"
  151. validate="true"
  152. id="dataForm"
  153. name="dataForm">
  154. ...
  155. <s:form>
  156.  
  157. package sample;
  158.  
  159. import java.io.File;
  160. import java.io.IOException;
  161. import java.util.ArrayList;
  162. import java.util.Collections;
  163. import java.util.Enumeration;
  164. import java.util.List;
  165. import java.util.Map.Entry;
  166.  
  167. import javax.servlet.http.HttpServletRequest;
  168.  
  169. import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
  170. import org.springframework.util.LinkedMultiValueMap;
  171. import org.springframework.util.MultiValueMap;
  172. import org.springframework.web.multipart.MultipartFile;
  173. import org.springframework.web.multipart.MultipartHttpServletRequest;
  174. import org.springframework.web.util.WebUtils;
  175.  
  176. import com.opensymphony.xwork2.util.logging.Logger;
  177. import com.opensymphony.xwork2.util.logging.LoggerFactory;
  178.  
  179. public class SpringMultipartParser implements MultiPartRequest {
  180. private static final Logger LOG = LoggerFactory.getLogger(MultiPartRequest.class);
  181.  
  182. private List<String> errors = new ArrayList<String>();
  183.  
  184. private MultiValueMap<String, MultipartFile> multipartMap;
  185.  
  186. private MultipartHttpServletRequest multipartRequest;
  187.  
  188. private MultiValueMap<String, File> multiFileMap = new LinkedMultiValueMap<String, File>();
  189.  
  190. public void parse(HttpServletRequest request, String saveDir)
  191. throws IOException {
  192. multipartRequest =
  193. WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
  194.  
  195. if(multipartRequest == null) {
  196. LOG.warn("Unable to MultipartHttpServletRequest");
  197. errors.add("Unable to MultipartHttpServletRequest");
  198. return;
  199. }
  200. multipartMap = multipartRequest.getMultiFileMap();
  201. for(Entry<String, List<MultipartFile>> fileEntry : multipartMap.entrySet()) {
  202. String fieldName = fileEntry.getKey();
  203. for(MultipartFile file : fileEntry.getValue()) {
  204. File temp = File.createTempFile("upload", ".dat");
  205. file.transferTo(temp);
  206. multiFileMap.add(fieldName, temp);
  207. }
  208. }
  209. }
  210.  
  211. public Enumeration<String> getFileParameterNames() {
  212. return Collections.enumeration(multipartMap.keySet());
  213. }
  214.  
  215. public String[] getContentType(String fieldName) {
  216. List<MultipartFile> files = multipartMap.get(fieldName);
  217. if(files == null) {
  218. return null;
  219. }
  220. String[] contentTypes = new String[files.size()];
  221. int i = 0;
  222. for(MultipartFile file : files) {
  223. contentTypes[i++] = file.getContentType();
  224. }
  225. return contentTypes;
  226. }
  227.  
  228. public File[] getFile(String fieldName) {
  229. List<File> files = multiFileMap.get(fieldName);
  230. return files == null ? null : files.toArray(new File[files.size()]);
  231. }
  232.  
  233. public String[] getFileNames(String fieldName) {
  234. List<MultipartFile> files = multipartMap.get(fieldName);
  235. if(files == null) {
  236. return null;
  237. }
  238. String[] fileNames = new String[files.size()];
  239. int i = 0;
  240. for(MultipartFile file : files) {
  241. fileNames[i++] = file.getOriginalFilename();
  242. }
  243. return fileNames;
  244. }
  245.  
  246. public String[] getFilesystemName(String fieldName) {
  247. List<File> files = multiFileMap.get(fieldName);
  248. if(files == null) {
  249. return null;
  250. }
  251. String[] fileNames = new String[files.size()];
  252. int i = 0;
  253. for(File file : files) {
  254. fileNames[i++] = file.getName();
  255. }
  256. return fileNames;
  257. }
  258.  
  259. public String getParameter(String name) {
  260. return multipartRequest.getParameter(name);
  261. }
  262.  
  263. public Enumeration<String> getParameterNames() {
  264. return multipartRequest.getParameterNames();
  265. }
  266.  
  267. public String[] getParameterValues(String name) {
  268. return multipartRequest.getParameterValues(name);
  269. }
  270.  
  271. public List getErrors() {
  272. return errors;
  273. }
  274.  
  275. public void cleanUp() {
  276. for(List<File> files : multiFileMap.values()) {
  277. for(File file : files) {
  278. file.delete();
  279. }
  280. }
  281.  
  282. // Spring takes care of the original File objects
  283. }
  284. }
  285.  
  286. <constant name="struts.multipart.parser" value="spring"/>
  287. <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
  288. name="spring"
  289. class="sample.SpringMultipartParser"
  290. scope="default"/>
  291.  
  292. /**
  293. * A strategy interface for multipart file upload resolution in accordance
  294. * with <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>.
  295. *
  296. */
  297.  
  298. ServletRequest request = ServletActionContext.getRequest();
  299.  
  300. MultipartRequest multipart = null;
  301. while (multipart == null)
  302. {
  303. if (request instanceof MultipartRequest)
  304. multipart = (MultipartRequest)request;
  305. else if (request instanceof ServletRequestWrapper)
  306. request = ((ServletRequestWrapper)request).getRequest();
  307. else
  308. break;
  309. }
  310.  
  311. if (multipart != null)
  312. {
  313. MultipartFile mf = multipart.getFile("forminputname");
  314. // do your stuff
  315. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement