2015-08-11 20 views
7

Sto provando a caricare file multipli usando FormData e molla.Carica più file usando ajax e molla mvc

HTML:

<input type="file" name="img" multiple id="upload-files"> 

JS Codice:

var ajaxData = new FormData(); 
var files = $('#upload-files').prop('files'); 
for(var i=0;i<files.length;i++){ 
    ajaxData.append('file['+i+']', files[i]); 
} 
ajaxData.append("file", files); 
$http.post('../rest/upload', ajaxData, { 
    headers: {'Content-Type': undefined }, 
    transformRequest: angular.identity 
}); 

Primavera controller codice:

@RequestMapping(value = "/upload", produces="application/json", method = RequestMethod.POST) 
@ResponseBody 
public String upload(
     @RequestParam ArrayList<MultipartFile> files 
){ 
    System.out.println(files.size()); 
    return null; 
} 

Tuttavia, conte di file sta uscendo a 0 sulla presentazione della richiesta con più file. Usando la notazione array MultipartFile[] files invece di ArrayList, fornisce 400, Bad Request.

Come far funzionare il controller a molla con più file? Non riesco a trovare una soluzione su altre domande SO.

+0

Hai provato a spostare la lista in un oggetto e hai configurato CommonsMultipartResolver e InternalResourceViewResolver su spring-servlet.xml? –

+0

Hai aggiunto encType correttamente nel pulsante di invio modulo? per esempio.

e tipo di input come

risposta

4

Per impostazione predefinita, lo DataBinder tenta di associare i parametri di richiesta all'oggetto di destinazione con convenzione: i nomi dei parametri dalla richiesta (il FormData nel caso) e l'azione del controllore devono corrispondere.

Nel tuo caso si dovrebbe rinominare file[i]-files[i]: parametro

for(var i=0; i < files.length; i++){ 
    ajaxData.append('files[' + i + ']', files[i]); 
} 

O di azione Rinomina dal ArrayList<MultipartFile> files a ArrayList<MultipartFile> file


Inoltre, eliminare questa linea ajaxData.append("file", files); (che è subito dopo il for loop), perché sta impostando un parametro con lo stesso nome e può verificarsi un qualche tipo di glitch.

Spero che questo aiuti.