多文件上传MultipartHttpServletRequest使用

多文件上传MultipartHttpServletRequest使用

废话少说直接撸代码

private void parseHttpServletRequest(HttpServletRequest request)throws Exception{
    List fileNames = new ArrayList<>();
    List fileEntity = new ArrayList<>();
    MyFile file = new MyFile();
    //创建一个通用的多部分解析器 
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());  
        //判断 request 是否有文件上传,即多部分请求 
        if(multipartResolver.isMultipart(request)){
            //转换成多部分request 
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;  
            MultiValueMap multiFileMap = multiRequest.getMultiFileMap();
            List fileSet = new LinkedList<>();
            for(Entry> temp : multiFileMap.entrySet()){
                fileSet = temp.getValue();
            }

            for(MultipartFile temp : fileSet){
                File file2 = new File("c:/temp/"+temp.getOriginalFilename());
                if(!file2.exists()){
                    file2.mkdirs();
                }
                fileNames.add(temp.getOriginalFilename());
                temp.transferTo(file2);
                fileEntity.add(file2);
            }
            file.setFileNames(fileNames);
            file.setFileEntity(fileEntity);
        }
    }

其实上面的代码中就是在获取多个文件对象时有个比较绕的地方,
通过
multiRequest.getFileNames();//值是Page这个字符串
multiRequest.getFileMap();
//会截断

MultiValueMap  multiFileMap = multiRequest.getMultiFileMap()

中的MultipartFile链表,只能获取一个。

debug时发现request中的MultiFileMap的大小确实是一个,但是这个key对应的value是一个链表。
(有个初步猜想,可能是在上传的文件是分Page上传的,文件较少时就放到一个List(LinkedList)中,文件较多获取较大时分页传送,具体的阀值没有测试)

你可能感兴趣的:(记录)