SpringMVC多文件上传+获取文件名

在使用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好用,具体自己可以测试一下。

猜你喜欢

转载自jiudi.iteye.com/blog/2274957