2010-12-10 7 views
6

J'ai un formulaire qui contient plusieurs fichiers télécharger comme celui-cicomment télécharger plusieurs fichiers dans Grails

<g:form name="legalActionForm" controller="legalAction" action="save" enctype="multipart/form-data"> 
<input type='file' name='documentFile'/> <input type='text' name='documentDate'/> 
<input type='file' name='documentFile'/> <input type='text' name='documentDate'/> 
<input type='file' name='documentFile'/> <input type='text' name='documentDate'/> 
<input type='file' name='documentFile'/> <input type='text' name='documentDate'/> 
<input type='file' name='documentFile'/> <input type='text' name='documentDate'/> 
<input type='submit' value='update'/> 
</g:form> 

utilisateur peut ajouter plus si nécessaire ... comment obtenir chaque fichier en utilisant itérateurs?

si un seul fichier que j'utilise request.getFile('documentFile'); mais si j'ai essayé avec request.getFileNames().each{obj -> println("${obj}"); } je ne suis le premier ..

+2

double possible de [Comment itérer fichiers téléchargés dans Grails] (http://stackoverflow.com/questions/3710232/how-to-iterate-over-uploaded-files-in-grails) –

+0

Le raison pour laquelle vous n'avez reçu que le premier 'documentFile' en utilisant 'request.fileNames.each {}' est parce que vos noms ne sont pas uniques dans votre formulaire. La réponse de Jinesh corrige ceci; J'ai également abordé cette question lorsque vous avez posé cette question il y a quelques mois. –

+0

@ nightingale2k1 nouvelle réponse ajoutée –

Répondre

4

Vous voulez faire comme si

<g:form action="save" method="post" enctype="multipart/form-data" > 
    <input type='file' name='documentFile.1' /> 
    <input type='file' name='documentFile.2' /> 
    <input type='file' name='documentFile.3' /> 
    </g:form> 

Dans votre contrôleur

def files = [] 
params.documentFile.each { 
    files.add(it.value) 
} 
+0

Lorsque j'utilise l'attribut multiple, je n'arrive pas à le faire fonctionner. '' –

8
request.getMultiFileMap().documentFile.each { 
    println it.originalFilename 
} 
+1

Ceci est la solution correcte lors de l'utilisation de l'attribut multiple de la balise d'entrée. – Jake

2

Vous essayez avec celui-ci

request.fileNames.each { 
    MultipartFile file = request.getFile(it) 
    //File file = request.getFile(it) 
    //do what you want 
} 
Questions connexes