2013-02-21 6 views
31

Ich versuche, eine mehrteilige Anfrage an den Server zu senden, aber ich bekomme die folgende Ausnahme HTTP-Status 500 - Anfrage Verarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.web.multipart.MultipartException: Die aktuelle Anforderung ist nicht ein mehrteiliger Anfrageorg.springframework.web.multipart.MultipartException: Die aktuelle Anfrage ist keine Multipart-Anfrage

<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-body"> 
     <form id="imageuploadForm" action="<c:url value="/members/profileimageupload" />" method="POST" enctype="multipart/form-data"> 
      <div style="width:40%; float:left"> 
       <div class="fileupload fileupload-new" data-provides="fileupload"> 
        <div class="fileupload-preview thumbnail" style="width: 200px; height: 150px;"></div> 
        <div> 
         <span class="btn btn-file"> 
          <span class="fileupload-new">Select image</span> 
          <span class="fileupload-exists">Change</span> 
          <input id="imageFile" name="imageFile" type="file" /> 
         </span> 
         <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a> 
        </div> 
       </div> 
      </div> 
      <div style="width:40%; float:right" > 
       <div class="progress"> 
        <div class="bar" style="width: 60%;"></div> 
       </div> 
      </div> 
     </form> 
    </div> 
    <div class="modal-footer"> 
     <button class="btn btn-success" id="submit">Upload</button> 
     <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true" >Close</button> 
    </div> 
</div> 

meine Ajax-Aufruf, der die Anforderung sendet.

$(function() { 
    //twitter bootstrap script 
    $("button#submit").click(function(){ 
     var $form = $("#imageuploadForm"); 
     var type = $form.attr('method'); 
     var url = $form.attr('action'); 
     $.ajax({ 
      type: $form.attr('method'), 
      url: $form.attr('action'), 
      data: $form.serialize(), 

      success: function(msg){ 
       $("#form-content").modal('hide'); 
      }, 

      error: function(){ 
      } 
     }); 
    }); 
}); 

mein Controller, die die Anforderung

@RequestMapping(value="/profileimageupload",method= RequestMethod.POST) 
    public void uploadProfileImage(@RequestParam(value="imageFile") final MultipartFile file) throws NumberFormatException, IOException{ 
    //// 
}    

Ich hatte die folgende Web-Konfiguration für Multipart-Datei geöffnet werden soll

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    /** 
    * Supports FileUploads. 
    */ 
    @Bean 
    public MultipartResolver multipartResolver() { 
     CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); 
     multipartResolver.setMaxUploadSize(500000000); 
     return multipartResolver; 
    } 
} 

Antwort

-1

Es scheint, dass Ihr Tag Form nicht gut formatiert ist und alles, was ist nach der

'action="<c:url value="/members/profileimageupload" />"' 

wird ignoriert. Versuchen Sie, wie diese und sehen, zu schreiben, wenn es funktioniert:

action="<c:url value='/members/profileimageupload' />" 
+0

No ... Habe :(nicht helfen –

11

Versuchen Sie es erneut mit "Header":

@RequestMapping(value = "/profileimageupload", headers = "content-type=multipart/*", method = RequestMethod.POST) 

und Ajax-Aufruf folgen: How can I upload files asynchronously?

Ich hoffe, dass diese hilfreich Sie!

+1

Ich fand, dass der "POST" Teil wichtig ist, es funktioniert nicht mit GET-Anfragen. –

25

Überprüfen Sie, ob Sie CommonsMultipartResolver in Frühlings-servlet.xml hinzugefügt haben.

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

Dann fügen Sie die enctype zu multipart/form-data in Ihrem Formular

<form id="fileupload" method="post" enctype="multipart/form-data"> 

schließlich in Controller Anfrage>MultipartHttpServletRequest

@RequestMapping(value = "/profileimageupload", method = RequestMethod.POST) 
public ModelAndView uploadProfileImage(MultipartHttpServletRequest request) {} 

Abhängigkeiten

  1. commons-fileupload.jar
  2. commons-io.jar