jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法


Posted in Javascript onDecember 12, 2015

前段时间介绍过jquery uploadify上传插件的使用方法,我在使用中遇到过Http Error 302错误问题,应该会有很多人在使用中遇到过,在此记录下来:

首先http 302是请求被重定向的意思,这就很容易理解了,如果你的uploadify处理上传脚本有session验证,就会出现此错误,因为flash在执行post请求的时候没有包含cookie信息,而服务器的session会根据客户端的cookie来得到SESSIONID。没有提交cookie自然就不能获取到session,然后uploadify就返回了302(请求被重定向)的错误。

解决办法当然是把session_id的值传到服务端:

<script>
$(document).ready(function() { 
   $('#file_upload').uploadify({ 
    'uploader' : 'uploadify/uploadify.swf', 
    'script'  : 'uploadify.php',
    'folder'  : 'uploads/file', 
    'formData': { 'session': '<?php echo session_id();?>'}, 
    'onComplete' : function(event, ID, fileObj, response, data) { 
     alert(response); 
    } 
   }); 
}); 
</script>

然后在服务器端session验证之前:

if (isset($_POST['session'])){ 
  session_id($_POST['session']); 
  session_start();//注意此函数要在session_id之后 
}

当然,你也可以直接在url中将session id传过去。

yii中代码如下:

$('#<?php echo $upload_name_id;?>').uploadify({
      'buttonText': '选择文件..',
      'fileObjName': 'imgFile',
      'method': 'post',
      'multi': false,
      'queueID': 'fileQueue',
      /*'uploadLimit': 2,*/
      'fileTypeExts': '*.gif;*.png;*.jpg;*.bmp;*.jpeg;',
      'buttonImage': '<?php echo $this->_static_public?>/js/uploadify/select.png',
      'formData': {
        'sessionId'  : '<?php echo Yii::app()->session->sessionID; ?>',
        'timestamp'  : '<?php echo time();?>',
        'token'    : '<?php echo md5('unique_salt'.time()); ?>',
        'modelName' : '<?php echo $modelName; ?>',
        'modelId' : '<?php echo $model->id; ?>'
      },
      'swf': '<?php echo $this->_static_public;?>/js/uploadify/uploadify.swf',
      'uploader': '<?php echo $this->createUrl('uploadify/basicExecute')?>',
      'onUploadStart': function () {
        $('#<?php echo $up_upload_name_id;?> img').remove();
        $('#<?php echo $up_upload_name_id;?> a').remove();
        $imgHtml = '<img class="upload_load" src="static/images/upload.gif" align="absmiddle" />';
        $('#<?php echo $up_upload_name_id;?>').append($imgHtml);
      },  
      'onUploadSuccess': function(file, data, response) {
        $('.upload_load').remove(); 
        var json = $.parseJSON(data); 
        if (json.state == 'success') {
          $("#<?php echo $d_upload_name_id;?>").remove();
          $(yt_upload_name_id).val(json.fileId);
          $imgHtml ='<div id="<?php echo $d_upload_name_id;?>">';          
          $imgHtml += '<a href="<?php echo $this->_baseUrl?>/' + json.file + '" target="_blank">';
          $imgHtml += '<img src="<?php echo $this->_baseUrl?>/'+json.file+'" width="85" height="75" align="absmiddle"/>';
          $imgHtml += '</a>';
          $imgHtml += '<a href="javascript:uploadifyRemove("' + json.fileId + '","<?php echo $d_upload_name_id;?>","<?php echo $yt_upload_name_id;?>")">删除</a>';
          $imgHtml +='</div>';
          $('#<?php echo $up_upload_name_id;?>').append($imgHtml);
        } else {
          alert(json.message);
        }
      },
      'onQueueComplete':function () {
        $('.upload_load').remove();
      }
    });

服务端:

if (isset($_POST['sessionId'])) {
  $session = Yii::app()->getSession();
  $session->close();
  $session->sessionID = $_POST['sessionId'];
  $session->open();
}

ps:jquery上传插件uploadify使用心得(总结)

自己使用实例:

1、jsp页面:

<link href="jsp/js/jquery_upload/uploadify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jsp/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="jsp/js/jquery_upload/swfobject.js"></script>
<script type="text/javascript" src="jsp/js/jquery_upload/jquery.uploadify.v2.1.4.min.js"></script>
//jquery文件上传
$(document).ready(function()
    {
      $("#uploadify").uploadify({
        'uploader': 'jsp/js/jquery_upload/uploadify.swf',
        'script': 'uploadFile.svl',
        'cancelImg': 'jsp/js/jquery_upload/cancel.png',
        'queueID': 'fileQueue',
        'auto': false,
        'multi': true,
        'method':'POST',
        'scriptData':{'saveFolder':'stuPhotos'},//GET方式才可生效
        'fileExt' :'*.jpg;*.gif;*.png', //控制可上传文件的扩展名
        'fileDesc': 'jpg、gif、png文件', //控制可上传文件的扩展名描述,两者需要同时使用 
        'buttonImg':'jsp/js/jquery_upload/selectBtn.gif',
        'width':80,//"浏览"按钮宽度
        'onComplete':function(event,ID,fileObj,response,data){
         //alert(response) //response为服务器响应数据
        },
      });
}); 
<td width="200" class="tabIndex" style="height:10px">照片:</td>
<td>
<input type="file" name="uploadify" id="uploadify" />
<p>
<a href="javascript:$('#uploadify').uploadifyUpload()">上传</a>| 
<a href="javascript:$('#uploadify').uploadifyClearQueue()">取消上传</a>
</p>
<div id="fileQueue" ></div>
<input type="hidden" name="stuPhoto" id="stuPhoto" />
</td>

2、服务端代码

public class UploadFileUtil extends HttpServlet {
private static final long serialVersionUID = 1L;
File tmpDir = null;// 初始化上传文件的临时存放目录
File saveDir = null;// 初始化上传文件后的保存目录
public UploadFileUtil() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  try{
    if(ServletFileUpload.isMultipartContent(request)){
     response.setCharacterEncoding("utf-8");//务必,防止返回文件名是乱码 
     DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象
     dff.setRepository(tmpDir);//指定上传文件的临时目录
     dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte
     ServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象
     sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸
     sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸
     FileItemIterator fii = sfu.getItemIterator(request);//解析request 请求,并返回FileItemIterator集合
     while(fii.hasNext()){
      FileItemStream fis = fii.next();//从集合中获得一个文件流
      if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域
       String fileName = fis.getName();//获取文件名
       String extName = "";
       if (fileName.lastIndexOf(".") >= 0) {
extName = fileName.substring(fileName.lastIndexOf("."));
}
        BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流
        String uuidName = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();//用UUID生成文件名
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+"/"+uuidName+extName)));//获得文件输出流
        Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹
      }
     }
     //jquery上传方式返回
     response.getWriter().print("upload success");//成功
    }
  }catch(Exception e){
   response.getWriter().print("upload fail");//失败
    e.printStackTrace();
  }
 } public void init() throws ServletException {
  super.init();
  String serverPath = this.getServletConfig().getServletContext().getRealPath("/");//获取服务器路径
   String tmpPath = serverPath+"/tmpUploadsFolder/";
   String savePath = serverPath+"/uploadsFolder/";
  tmpDir = new File(tmpPath);
  saveDir = new File(savePath);
  if(!tmpDir.isDirectory())
    tmpDir.mkdir();
  if(!saveDir.isDirectory())
    saveDir.mkdir();
 }}

以上内容是小编给大家介绍的jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法,希望大家喜欢。

Javascript 相关文章推荐
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
Dec 27 Javascript
用javascript实现给出的盒子的序列是否可连为一矩型
Aug 30 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
Jun 28 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
JS中不为人知的五种声明Number的方式简要概述
Feb 22 Javascript
js中通过split函数分割字符串成数组小例子
Sep 21 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
js实现的早期滑动门菜单效果代码
Aug 27 Javascript
javascript拖拽应用实例(二)
Mar 25 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
了解VUE的render函数的使用
Jun 08 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
jQuery同步提交示例代码
Dec 12 #Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 #Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 #Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
Dec 11 #Javascript
jQuery入门之层次选择器实例简析
Dec 11 #Javascript
jQuery使用$.ajax提交表单完整实例
Dec 11 #Javascript
jQuery使用$.ajax进行即时验证实例详解
Dec 11 #Javascript
You might like
最简单的PHP程序--记数器
2006/10/09 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
js停止输出代码
2008/07/20 Javascript
js no-repeat写法 背景不重复
2009/03/18 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
python中温度单位转换的实例方法
2020/12/27 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
如何利用find命令查找文件
2015/02/07 面试题
公司薪酬管理制度
2014/01/31 职场文书
学校师德承诺书
2014/05/23 职场文书
物流管理专业求职信
2014/05/29 职场文书
体育专业自荐书
2014/05/29 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
技术员个人工作总结
2015/03/03 职场文书
六年级数学教学反思
2016/02/16 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL