Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <s:form namespace="/admin_side"
- action="Category"
- enctype="multipart/form-data"
- method="POST"
- validate="true"
- id="dataForm"
- name="dataForm">
- <s:hidden name="%{#attr._csrf.parameterName}"
- value="%{#attr._csrf.token}"/>
- </s:form>
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="3.0"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/applicationContext.xml
- /WEB-INF/spring-security.xml
- </param-value>
- </context-param>
- <filter>
- <filter-name>MultipartFilter</filter-name>
- <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
- </filter>
- <filter>
- <filter-name>springSecurityFilterChain</filter-name>
- <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>MultipartFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>springSecurityFilterChain</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter>
- <filter-name>AdminLoginNocacheFilter</filter-name>
- <filter-class>filter.AdminLoginNocacheFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>AdminLoginNocacheFilter</filter-name>
- <url-pattern>/admin_login/*</url-pattern>
- </filter-mapping>
- <filter>
- <filter-name>NoCacheFilter</filter-name>
- <filter-class>filter.NoCacheFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>NoCacheFilter</filter-name>
- <url-pattern>/admin_side/*</url-pattern>
- </filter-mapping>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <listener>
- <description>Description</description>
- <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
- </listener>
- <listener>
- <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
- </listener>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- <init-param>
- <param-name>struts.devMode</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <session-config>
- <session-timeout>
- 30
- </session-timeout>
- </session-config>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
- <bean id="filterMultipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <property name="maxUploadSize" value="-1" />
- </bean>
- @Namespace("/admin_side")
- @ResultPath("/WEB-INF/content")
- @ParentPackage(value="struts-default")
- public final class CategoryAction extends ActionSupport implements Serializable, ValidationAware, ModelDriven<Category>
- {
- private File fileUpload;
- private String fileUploadContentType;
- private String fileUploadFileName;
- private static final long serialVersionUID = 1L;
- //Getters and setters.
- //Necessary validators as required.
- @Action(value = "AddCategory",
- results = {
- @Result(name=ActionSupport.SUCCESS, type="redirectAction", params={"namespace", "/admin_side", "actionName", "Category"}),
- @Result(name = ActionSupport.INPUT, location = "Category.jsp")},
- interceptorRefs={
- @InterceptorRef(value="defaultStack", "validation.validateAnnotatedMethodOnly", "true"})
- })
- public String insert(){
- //fileUpload, fileUploadContentType and fileUploadFileName are null here after the form is submitted.
- return ActionSupport.SUCCESS;
- }
- @Action(value = "Category",
- results = {
- @Result(name=ActionSupport.SUCCESS, location="Category.jsp"),
- @Result(name = ActionSupport.INPUT, location = "Category.jsp")},
- interceptorRefs={
- @InterceptorRef(value="defaultStack", params={ "validation.validateAnnotatedMethodOnly", "true", "validation.excludeMethods", "load"})})
- public String load() throws Exception{
- //This method is just required to return an initial view on page load.
- return ActionSupport.SUCCESS;
- }
- }
- <s:form namespace="/admin_side"
- action="Category?%{#attr._csrf.parameterName}=%{#attr._csrf.token}"
- enctype="multipart/form-data"
- method="POST"
- validate="true"
- id="dataForm"
- name="dataForm">
- ...
- <s:form>
- package sample;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Enumeration;
- import java.util.List;
- import java.util.Map.Entry;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
- import org.springframework.util.LinkedMultiValueMap;
- import org.springframework.util.MultiValueMap;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.multipart.MultipartHttpServletRequest;
- import org.springframework.web.util.WebUtils;
- import com.opensymphony.xwork2.util.logging.Logger;
- import com.opensymphony.xwork2.util.logging.LoggerFactory;
- public class SpringMultipartParser implements MultiPartRequest {
- private static final Logger LOG = LoggerFactory.getLogger(MultiPartRequest.class);
- private List<String> errors = new ArrayList<String>();
- private MultiValueMap<String, MultipartFile> multipartMap;
- private MultipartHttpServletRequest multipartRequest;
- private MultiValueMap<String, File> multiFileMap = new LinkedMultiValueMap<String, File>();
- public void parse(HttpServletRequest request, String saveDir)
- throws IOException {
- multipartRequest =
- WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
- if(multipartRequest == null) {
- LOG.warn("Unable to MultipartHttpServletRequest");
- errors.add("Unable to MultipartHttpServletRequest");
- return;
- }
- multipartMap = multipartRequest.getMultiFileMap();
- for(Entry<String, List<MultipartFile>> fileEntry : multipartMap.entrySet()) {
- String fieldName = fileEntry.getKey();
- for(MultipartFile file : fileEntry.getValue()) {
- File temp = File.createTempFile("upload", ".dat");
- file.transferTo(temp);
- multiFileMap.add(fieldName, temp);
- }
- }
- }
- public Enumeration<String> getFileParameterNames() {
- return Collections.enumeration(multipartMap.keySet());
- }
- public String[] getContentType(String fieldName) {
- List<MultipartFile> files = multipartMap.get(fieldName);
- if(files == null) {
- return null;
- }
- String[] contentTypes = new String[files.size()];
- int i = 0;
- for(MultipartFile file : files) {
- contentTypes[i++] = file.getContentType();
- }
- return contentTypes;
- }
- public File[] getFile(String fieldName) {
- List<File> files = multiFileMap.get(fieldName);
- return files == null ? null : files.toArray(new File[files.size()]);
- }
- public String[] getFileNames(String fieldName) {
- List<MultipartFile> files = multipartMap.get(fieldName);
- if(files == null) {
- return null;
- }
- String[] fileNames = new String[files.size()];
- int i = 0;
- for(MultipartFile file : files) {
- fileNames[i++] = file.getOriginalFilename();
- }
- return fileNames;
- }
- public String[] getFilesystemName(String fieldName) {
- List<File> files = multiFileMap.get(fieldName);
- if(files == null) {
- return null;
- }
- String[] fileNames = new String[files.size()];
- int i = 0;
- for(File file : files) {
- fileNames[i++] = file.getName();
- }
- return fileNames;
- }
- public String getParameter(String name) {
- return multipartRequest.getParameter(name);
- }
- public Enumeration<String> getParameterNames() {
- return multipartRequest.getParameterNames();
- }
- public String[] getParameterValues(String name) {
- return multipartRequest.getParameterValues(name);
- }
- public List getErrors() {
- return errors;
- }
- public void cleanUp() {
- for(List<File> files : multiFileMap.values()) {
- for(File file : files) {
- file.delete();
- }
- }
- // Spring takes care of the original File objects
- }
- }
- <constant name="struts.multipart.parser" value="spring"/>
- <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
- name="spring"
- class="sample.SpringMultipartParser"
- scope="default"/>
- /**
- * A strategy interface for multipart file upload resolution in accordance
- * with <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>.
- *
- */
- ServletRequest request = ServletActionContext.getRequest();
- MultipartRequest multipart = null;
- while (multipart == null)
- {
- if (request instanceof MultipartRequest)
- multipart = (MultipartRequest)request;
- else if (request instanceof ServletRequestWrapper)
- request = ((ServletRequestWrapper)request).getRequest();
- else
- break;
- }
- if (multipart != null)
- {
- MultipartFile mf = multipart.getFile("forminputname");
- // do your stuff
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement