1 protected void doPost(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 request.setCharacterEncoding("utf-8"); 5 response.setCharacterEncoding("utf-8"); 6 String savePath = request.getServletContext().getRealPath("/images"); 7 Part part = request.getPart("file"); 8 9 String header = part.getHeader("content-disposition"); 10 String filename = header.substring(header.lastIndexOf("=") + 4, header.length() - 1); 11 part.writ(savePath+File.separator+filename); 12 PrintWriter out = response.getWriter(); 13 out.println("上传成功"); 14 out.flush(); 15 out.close(); 16 }
重点是这两句:
1 Part part=request.getPart("file"); 2 String header= part.getHeader("content-disposition");
我刚开始在xp上使用的时候,header返回正常:form-data;name="file";filename="0232.png";
后来我换了win7怎么返回的filename带路径:form-data; name="file"; filename="F:\图片\0232.png";
请问这是怎么回事,是不是和操作系统有关了?我其他的也没改变啊?刚开始学jsp,servlet,不懂?希望大家帮助,谢谢~~~
同意楼上的,这个是浏览器的原因,不同的浏览器在向服务器发送上传文件的名称部分时是会存在一些差异的,这个建议取出filename处理后再使用,一般了服务器端都不会太关注这个原始图片名称的,都会根据服务器端规则进行生成相应的文件名称的,所以这个从这个角度来说你可以完全不用管。
这个我在xp机子,和win7机子用的浏览器都是IE8,而且我在另外一台win7机子上运行时,出现同样的问题。
具体原因,不清楚ing。同样谢谢你的回答。
这个跟服务器没有关系,是浏览器发上来的http报文就是这样的,不同的浏览器有些地方会有差异。装个fiddler抓下包就能看到完整的协议了。
我在xp机子,和win7机子用的浏览器都是IE8,而且我在另外一台win7机子上运行时,出现同样的问题。fiddler试了一下,不会用,汗!感觉挺麻烦的。
具体原因,不清楚ing。不过还是谢谢你的回答。
@恍若: 也许操作系统不一样也会有影响,浏览器应该也是需要调用操作系统的接口去获取的。这个东西没必要太纠结,只要知道有这个差异性就好了,服务器端坐下兼容处理就行了。