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 相关文章推荐
XP折叠菜单&amp;仿QQ2006菜单
Dec 16 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 Javascript
javascript性能优化之DOM交互操作实例分析
Dec 12 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 Javascript
将Sublime Text 3 添加到右键中的简单方法
Dec 12 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
JavaScript 九种跨域方式实现原理
Feb 11 Javascript
js实现贪吃蛇小游戏
Oct 29 Javascript
JS实现图片幻灯片效果代码实例
May 21 Javascript
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 $_ENV为空的原因分析
2009/06/01 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
php查看网页源代码的方法
2015/03/13 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
Three.js快速入门教程
2016/09/09 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
对Python中range()函数和list的比较
2018/04/19 Python
python实现整数的二进制循环移位
2019/03/08 Python
Python各种扩展名区别点整理
2020/02/27 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
赔偿协议书怎么写
2015/01/28 职场文书
财政局长个人总结
2015/03/04 职场文书
黑白记忆观后感
2015/06/18 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
python Tkinter模块使用方法详解
2022/04/07 Python