Spring文件上传有两个文件上传元素

时间:2013-09-05 03:33:09

标签: java spring spring-mvc

我有一个包含两个文件上传元素的表单,这些元素支持多个文件上传。 我的问题是如何获取两个文件上传元素的数据。

例如:我需要“files”“files2”元素的字段。

使用以下代码,我只能获取一个文件上传元素的详细信息。 我是Spring的新手,希望我的问题很明确。

enter image description here     

<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", "");
}

1 个答案:

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