问题:
一开始以为Servlet 没有提供对文件读取的相关内容。
后来发现,HttpServletRequest中有getParts方法,可以获取上传的文件。
再后发,经过反复测试,发现都读不到相关内容。
再后发,发现有一些示例,在Servlet程序中通过注解可以获取到。
嗯,我代码只有Filter,没有Servlet,所以。。。读不到。
解决:
最后发现:在Tomcat中通过server.xml配置:allowCasualMultipartParsing=true可以实现:
这个毕竟要手工配置,一直在找有没有通过代码可以设置的,找了很久,目前没发现。
补充说明:
HttpRequest request = getRequest(); write("msg : " + request.getParameter("msg") + "<br/>"); Collection<Part> parts = request.getParts(); if (parts != null) { for (Part part : parts) { write("fileName : " + part.getSubmittedFileName() + "<br/>"); } }
对于拿到的Part,即Body的解析内容。
如果存在文件,返回:表单+请求头+文件混在一起的parts。
part.getSubmittedFileName() 不为null,则有上传的文件名
part.getName() 不为null,则有表单或请求头的名称,值的话通过 request.getParameter("msg")、request.getHeader("xxx") 来读取。
如何判断哪些是表单,哪些是文件?看哪个名称null不null。