在使用SpringMVC做上传文件时,通常的做法是,如下:
public Map<String, Object> upload(HttpServletRequest request, @RequestParam MultipartFile file){ }
在形参中定义MultipartFile,如果是单个文件,倒还没有什么影响,我们完全可以将input的name定义为file,否则会接收不到。那如果多文件呢? 像这样MultipartFile[] files 么?? 对于多个input file,我们不可能吧所有的input的name都定义为同样的名字, 比如file。如果改了名字,会发现接收不到,或者少接收。
那有时候,我们确实希望所有的input file的name都不一样,可能一个name是file1,另一个name是file2, 那我们没理由定义多个的,如下:
public Map<String, Object> upload(MultipartFile file1,MultipartFile file2,MultipartFile file3){ }
这样,对与多文件,但名字有不同的情况下,我们会麻烦死。
那SpringMVC有另外一种方式,可以让我们解决这种困扰,就是使用CommonsMultipartResolver:
public Map<String,Object> upload(HttpServletRequest request){ CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); if(multipartResolver.isMultipart(request)){ MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; Iterator<String> iter = multiRequest.getFileNames(); while(iter.hasNext()){ MultipartFile file = multiRequest.getFile(iter.next()); System.out.println(file.getName()); } } }
这样就能解决多文件上传,但name又不统一的问题了。 当然,SpringMVC的文件上传,我也推荐使用这个,要比MultipartFile好用,具体自己可以测试一下。