我有一个包含两个文件上传元素的表单,这些元素支持多个文件上传。 我的问题是如何获取两个文件上传元素的数据。
例如:我需要“files”和“files2”元素的字段。
使用以下代码,我只能获取一个文件上传元素的详细信息。 我是Spring的新手,希望我的问题很明确。
<table id="fileTable">
<tr>
<td><label for="file">Image URL</label></td>
<td><input type="file" name="files[0]" id="file"></input></td>
<td><input id="addFile" type="button" value="Add Image URL" /></td>
</tr>
<tr id="img_hover">
<td><label for="file2">Image Hover URL</label></td>
<td><input type="file" name="files2[0]" id="file2"></input></td>
<td><input id="addFile2" type="button" value="Add Image Hover URL" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save"/>
</td>
</tr>
@RequestMapping(value = "/save.action", method = RequestMethod.POST)
public ModelAndView save(HttpServletRequest request,
HttpServletResponse response,
@ModelAttribute("uploadForm") 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);
System.out.println(fileName);
}
}
return new ModelAndView("index", "model", "");
}
答案 0 :(得分:0)
可能存在其他阻止问题,但突出的问题是您的文件输入字段未正确命名以作为集合获取。
<input type="file" name="files[0]" id="file"
...
<input type="file" name="files2[0]" id="file"
应该是
<input type="file" name="files[0]" id="file"
...
<input type="file" name="files[1]" id="file"
在第一个版本中,它们将被视为2个不同的文件集,一个名为files
,另一个名为files2
。
更新为OP评论:
问题是你已经在表单中定义了属于不同集合的2个文件字段(例如文件,文件2),但是你只获得了一个集合 - files
(例如uploadForm.getFiles( ))。如果您打算将文件保存在单独的集合中,那么您需要将另一个集合添加到FileUploadForm
private List<MultiparfFile> files;
private List<MultipartFile> files2;
然后在你的控制器中
uploadForm.getFiles(); //for file fields named files
uploadForm.getFiles2(); //for file fields named files2