使用过滤器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();
}
}
}