即使没有选择任何文件,Spring List <multipartfile>也会返回一个

时间:2017-05-04 08:45:29

标签: java spring jsp multipartform-data

我有一个表单,允许用户选择要上传到服务器的多个图像。问题是我的控制器files.size()返回one,即使我没有选择任何要上传的文件。所以行if(files != null && files.size() > 0)总是被执行。

@RequestMapping(value="/advert/add", method=POST)
public void insertAdverts(HttpServletRequest request,
        HttpServletResponse response, 
        @ModelAttribute("fileUpload") FileUpload fileUpload)
                throws NumberFormatException, IOException, IllegalStateException, 
                ServletException, FileUploadException{

    //Get uploaded files and store them
    List<MultipartFile> files = fileUpload.getFiles();
    List<String> fileNames = new ArrayList<String>();

    try{
        if(files != null && files.size() > 0){
            for(MultipartFile image:files){
                String fileName = image.getOriginalFilename();
                String[] fileSplit = fileName.split("\\.");
                fileNames.add(fileName);

                File uploadedFile = new File(uploadDirectory+"\\"+fileName);
                uploadedFile.createNewFile();
                image.transferTo(uploadedFile);
            }
        }

这是FileUpload Class

public class FileUpload implements Serializable{

private static final long serialVersionUID = 1L;

private int menuId;
private int subMenuId;
private String adLocation;
private String adSubject;
private String adBody;
private String contactNo;
private String contactEmail;
private String fileName;
private List<MultipartFile> files = null;
.....

和jsp表单

<form:form id = "add-advert-form" method="post" action="/AdPost/advert/add" 
    enctype="multipart/form-data" modelAttribute="fileUpload">
        ...
    <form:input type="file" id="adPictures" accept="image/*" 
               name="files[]" multiple="multiple" path="files"/>
</form:form>

有人可以告诉我为什么List.size()正在返回one而不是zero以及如何获得正确的列表大小。

这是调试窗口中的文件:

This is what files looks like in debug window

fileItem

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我要做的是检查列表中的第一个商品尺寸。 这是我使用groovy的代码

if(!files.get(0).isEmpty){

}

答案 1 :(得分:0)

这是一般信息,可能会对其他人有所帮助,并且绝对可以解决这个问题。

根据this official Mozilla Developer链接,这里是有关输入类型文件的注释。

因此只需通过调试检查后端文件参数的值是什么。

注意:如果选择了多个文件,则字符串代表第一个 选定的文件。 JavaScript可以通过 输入的文件属性。如果尚未选择文件,则字符串为“” (空)。该字符串以C:\ fakepath \为前缀,以防止 猜测用户文件结构的恶意软件。

答案 2 :(得分:0)

我最近遇到这个问题,并问了同样的问题。我只是想出了这个解决方案。如果您是这样:

if(files[0].getSize() != 0)

我知道这已经很晚了,但希望以后能对某人有所帮助。