Filter过滤器获取MultipartFile文件

使用过滤器doFilter中的arg0参数获取HttpServletRequest后,获取MultipartFile文件,经过查找很多人说用这个方法可以实现

网上普遍的方法,小编测试parts的size为0 ,去不到文件。

@Override
protected void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws ServletException, IOException {
    
    
HttpServletRequest request = (HttpServletRequest) arg0;
    Collection<Part> parts = request.getParts();
    for (Part part : parts) {
    
    
        if (part.getContentType() != null && part.getSize() > 0) {
    
    
            String fileName = part.getSubmittedFileName();
            InputStream inputStream = part.getInputStream();
            // do something with the file
        }
    }
}

于是通过debug操作发现,MultipartFile 确实存在HttpServletRequest中,但是在他的子类DefaultMultipartHttpServletRequest中,最终尝试用这个方法获取到了文件内容

可行方法

@Override
protected void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws ServletException, IOException {
    
    
    DefaultMultipartHttpServletRequest defaultMultipartHttpServletRequest = (DefaultMultipartHttpServletRequest) arg0;
                Set<Map.Entry<String, MultipartFile>> entries = defaultMultipartHttpServletRequest.getFileMap().entrySet()
               
                for (Map.Entry<String, MultipartFile> entry : entries) {
    
    
                //文件参数名称
                    String fileParmsName = entry.getKey();
                    //文件
                    MultipartFile value = entry.getValue();
                    //文件名称
                    String fileName = value.getName();
                    }
                }
}

猜你喜欢

转载自blog.csdn.net/qq_46645840/article/details/130847470