uploadify http 302问题说明

本文介绍了解决使用Uploadify插件时遇到的302错误问题,该问题通常发生在进行了登录验证的session中。文章分析了问题产生的根本原因,并提供了一种解决方案:在URL中手动指定jsessionid来确保正确地定位到已登录用户的session。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中用到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);
	}

    这段代码会报302错误。302状态码表示请求发生了暂时性转移,且302 重定向是临时性转移。如果去掉@login不进行登录则不会出现此问题。所以不难理解问题的关键在于登录验证的逻辑。登录验证的一般逻辑是获取session保存的用户名name,如果name==null的话就重定向到登录界面,所以这个302的问题就不难发现了:关键在于这个session中没有保存该name。在这里你可能会想怎么可能?我已经登录了,且把name保存在session中,怎么可能会在登录验证的时候name == null???所以只有一种情况,此session非彼session!!!!说明uploadify在向后台发送请求的时候重新生成了一个session。

  我们知道在第一次访问服务器的时候,服务器开启一个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()%>",

注意此处iconupload后面是“;"而不是“?".(貌似有点乱,不当之处还请指正,共同学习)


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭梧悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值