在项目中用到uploadify的程序员应该遇到这个http 302的错误,其实这个原因的根本原因在于你在执行后台代码之前用session进行登录验证。所以最简单的解决这个问题的方法是在上传文件的代码块中把session登录验证的代码块去掉。当然这个方法不可取,下面先分析这个问题出现的原因及另一种解决方式
下面先给导致问题出现的代码
uploader : "/acr/user/rqs/iconupload",//此为uploadify插件向后台发送请求的url
@Login//登录验证 @RequestMapping(value = "/iconupload", method = RequestMethod.POST) public @ResponseBody String iconUpload( @RequestParam MultipartFile file, Model model,HttpSession session, HttpServletRequest request) throws Exception { String root = "/srv/icons/icon"; return FileUtil.upload(file, root,request); }
我们知道在第一次访问服务器的时候,服务器开启一个session(此处假设为S1)发给浏览器一个jsessionid(此处假设jsessionid=1)。在以后的发起的每一个请求中浏览器会把这个jsessionid重新发给服务器来定位S1,因为session.getId() == jsessionid==1.并从S1中获取name来验证用户是否登录。
当用uploadify的时候,通过iconUpload方法参数中的session获取此session的id,即:session.getId().经过测试发现此时的session.getId() != 1,由此可见这个session已经不是原来的那个session了。
既然是通过jsessionid来定位当前用户的session,那么解决这个问题的方法很自然的就出现了,即在url后面加上“;jsessionid=”+1(或S1.getId()),手工指定jsessionid == 1(S1.getId())来定位正确的session(S1)就可以了。所以改正后的代码如下
uploader: "/acr/user/rqs/iconupload;jsessionid="+"<%=request.getSession().getId()%>",