2013-07-04 12 views
20

Ho fatto un POC per il caricamento di file multipart di resto a molla 3. Funziona bene. Ma quando ho provato ad integrarmi con la mia applicazione, sto affrontando problemi.REST DI PRIMAVERA: la richiesta è stata rifiutata perché non è stato trovato alcun limite di più parti

getta seguente eccezione:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 
nested exception is org.apache.commons.fileupload.FileUploadException: 
the request was rejected because no multipart boundary was found**" 

Si prega di farmi sapere se ho sbagliato in qualsiasi parte del mio codice.

Fagioli:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
<property name="order" value="1" /> 
<property name="mediaTypes"> 
<map> 
    <entry key="json" value="application/json" /> 
    <entry key="xml" value="application/xml" /> 
    <entry key="file" value="multipart/mixed" /> 
</map> 
</property> 
</bean> 
<!-- multipart resolver --> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <!-- one of the properties available; the maximum file size in bytes --> 
    <property name="maxUploadSize" value="50000000" /> 
</bean> 

controllore:

@Controller 
public class MultipleFilesRecieve { 
    @RequestMapping (value = "/saveMultiple", method = RequestMethod.POST) 
     public String save(FileUploadForm uploadForm) { 
     List<MultipartFile> files = uploadForm.getFiles(); 
     List<String> fileNames = new ArrayList<String>(); 
     if (null != files && files.size() > 0) { 
      for (MultipartFile multipartFile : files) { 
       String fileName = multipartFile.getOriginalFilename(); 
       fileNames.add(fileName); 
      } 
     } 
     return "multifileSuccess"; 
    } 
} 

risposta

25

Il problema non è nel codice - è nella vostra richiesta. Ti manca il confine nella tua richiesta multipart. Come si legge in specification:

Il campo Content-Type per i soggetti a più parti richiede un parametro, "confine", che viene utilizzato per specificare il limite di incapsulamento. Il limite di incapsulamento è definito come una riga composta interamente da due caratteri trattini ("-", codice decimale 45) seguito dal valore del parametro di confine dal campo dell'intestazione Content-Type.

This e this post devono essere utili.

+0

hey @sermolaev, puoi dare un esempio di valore al contorno? –

0

Stai utilizzando filtri di sicurezza? Il mio problema è stato risolto rimuovendo la catena del filtro di sicurezza. Da questo:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(this.springSecurityFilterChain).build(); 

a questo:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); 

ho aperto un problema in cui spiego i dettagli: https://jira.spring.io/browse/SPR-12114

0

@sermolaev ha ragione nella sua risposta.

Voglio condividere la mia esperienza relativa a questo problema. Ho riscontrato questo problema in Postman, ma non sono riuscito a capirne la causa principale per molto tempo. Il mio modello di richiesta sembrava essere corretto perché Postman includeva boundary in esso ...

Alla fine ho scoperto che quando si specifica l'intestazione Content-Type=multipart/form da solo, si sostituisce a quello aggiunto automaticamente da Postman. E questo porta allo stesso errore del tuo. La mia soluzione era semplice come rimuovere l'intestazione Content-Type.

Problemi correlati