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 相关文章推荐
js实现的日期操作类DateTime函数代码
Mar 16 Javascript
js 遍历对象的属性的代码
Dec 29 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
Jun 03 Javascript
JavaScript中对象的不同创建方法
Aug 12 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
jquery将标签元素的高设为屏幕的百分比
Apr 19 jQuery
node+express框架中连接使用mysql(经验总结)
Nov 10 Javascript
vue学习笔记之slot插槽用法实例分析
Feb 29 Javascript
JS数组的高级使用方法示例小结
Mar 14 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
Axios代理配置及封装响应拦截处理方式
Apr 07 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
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
python操作ie登陆土豆网的方法
2015/05/09 Python
Python多层装饰器用法实例分析
2018/02/09 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
服务员自我评价
2014/01/25 职场文书
自我鉴定书
2014/03/24 职场文书
文明市民先进事迹
2014/05/15 职场文书
质量月口号
2014/06/20 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript