如何在Grails中上传多个文件

7

我有一个表单,其中包含多个文件上传,就像这个:

<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>

如果需要,用户可以添加更多...如何使用迭代器获取每个文件?

如果只有一个文件,我使用request.getFile('documentFile');,但是如果我尝试使用request.getFileNames().each{obj -> println("${obj}"); },我只能得到第一个文件..


2
可能是重复的问题:如何在Grails中迭代上传的文件 - Rob Hruska
你只在使用request.fileNames.each {}时收到了第一个'documentFile'的原因是你的表单中的名称不唯一。Jinesh的答案解决了这个问题;我也在几个月前回答你这个问题时提到了这一点。 - Rob Hruska
@nightingale2k1 新答案已添加。 - Suganthan Madhavan Pillai
3个回答

9
request.getMultiFileMap().documentFile.each {
    println it.originalFilename
}

2
当使用输入标签的多个属性时,这是正确的解决方案。 - Jake

5
你需要这样做:

按如下方式操作


   <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>  

在你的控制器中:
def files = []  
params.documentFile.each {  
  files.add(it.value)  
 }  

当我使用multiple属性时,它无法正常工作。<input type="file" id="files" name="arquivos[]" multiple /> - Cassio Landim

3
您可以尝试使用这个。
request.fileNames.each {
   MultipartFile file = request.getFile(it)
   //File file = request.getFile(it)
   //do what you want
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接