最近开发一个项目,集成了批量上传文件插件Uploadify,在谷歌Chrome和IE下都能正常上传,只有火狐下提示HTTP Error错误。
这个问题在网上找寻许久,才找到原因(不知道是搜索关键词不对还是网上资料少)。
原因是因为由于我在做的是会员登录上传头像,需要验证登录后才能上传图片(即在处理上传图片的PHP代码前面,加入了判断用户是否登录的验证)。而flash在firefox下重新发起session会话,这样的话,用于判断用户是否登录session中的值就不存在,也就是用户并未登录,这样就会报错。
解决办法:
在uploadify发送的时候,连同session_id一起post或者get,这样在服务器上初始化session_id即可获取到用户的登录。
代码如下:
客户端(ThinkPHP上传文件模板)代码
$(function() { $('#file_upload').uploadify({ 'formData': { '<{:session_name()}>': '<{:session_id()}>', //此处获取SESSIONID 'timestamp': '<{$timestamp}>', 'token': '<{$token}>' } //后边对于解决本问题无关代码省略。。。 }) })
服务器端(ThinkPHP控制器)代码
//初始化执行 public function _initialize(){ //此处为解决Uploadify在火狐下出现http 302错误 重新设置SESSION $session_name= session_name(); if(isset($_POST[$session_name])) { session_id($_POST[$session_name]); session_start(); } //执行登陆验证检测函数 $this->powerverify(); }