2016-12-21 6 views
1

Я пытаюсь загрузить несколько файлов в мое приложение Java Spring MVC Web. Я имею формуНесколько многостраничных файлов в Spring MVC - Ajax

<form id="commentForm" name="commentForm" role="form" method="post" enctype="multipart/form-data" action="${rc.getContextPath()}/module/support/save-item-comment"> 
//other form elements 
<input type="file" name="fileUpload" multiple/> 
<button type="submit" class="btn btn-primary" >Save</button> 
</form> 

Я пытаюсь выбрать и загрузить несколько файлов одновременно. Но несколько загрузок файлов не работают. только один файл может быть загружен через код, если я удалить ajax function и использовать нормальный form submission.

Дело мне нужно сделать, это загрузить несколько файлов с помощью Ajax Fuction.

Я использую Ajax для отправки формы и сценарий:

$("#commentForm").submit(function(e) 
{ 
$("#divLoading").addClass('show'); 
var postData = $(this).serializeArray(); 
var formURL = $(this).attr("action"); 

$.ajax(
{ 
    url : formURL, 
    type: "POST", 
    data : postData, 
    dataType : "html" 
}); 
e.preventDefault(); 
}); 

В моем классе контроллера у меня есть:

@RequestMapping(value = "/upload-file", method = RequestMethod.POST) 
public String saveFiles(@RequestParam("fileUpload[]") MultipartFile fileUpload[], ModelMap model) 
{ 
//my custom logic 
} 

У меня есть следующая фасоль в моем корневой context.xml файл

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 

, а также эта зависимость в моем pom.xml

<dependency> 
<groupId>commons-fileupload</groupId> 
<artifactId>commons-fileupload</artifactId> 
<version>1.3.1</version> 
</dependency> 

Я получаю ошибку ниже, когда я пытаюсь отправить форму:

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/smartwcm-services] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: The current request is not a multipart request] with root cause 
org.springframework.web.multipart.MultipartException: The current request is not a multipart request 
    at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.assertIsMultipartRequest(RequestParamMethodArgumentResolver.java:216) 
    at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.resolveName(RequestParamMethodArgumentResolver.java:167) 
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:88) 
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) 
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(Reques 
+0

wh у вас есть правильная попытка добавить следующие две строки в ajax processData: false, contentType: false, –

ответ

1

Вы можете сделать загружать несколько файлов следующим образом,

HTML:

<form id="commentForm" name="commentForm" role="form" method="post" enctype="multipart/form-data" action="${rc.getContextPath()}/module/support/save-item-comment"> 
//other form elements 
<input id="file" type="file" name="fileUpload" multiple/> 
<button type="submit" class="btn btn-primary" >Save</button> 
</form> 

JQuery:

var data = new FormData(); 
jQuery.each(jQuery('#file')[0].files, function(i, file) { 
    data.append('file-'+i, file); 
}); 

$("#commentForm").submit(function(e) 
{ 
    e.preventDefault(); 
    $("#divLoading").addClass('show'); 

    $.ajax(
    { 
     url : $(this).attr("action"), 
     type: "POST", 
     data: data, 
     enctype: 'multipart/form-data', 
     processData: false, 
     contentType:false, 
    }); 
}); 
+0

Если я использую эти HTML и jquery, я не получаю значение элементов формы, включая имена файлов в контроллере –

Смежные вопросы