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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
Extjs Ajax 乱码问题解决方案
Apr 15 Javascript
JS操作iframe里的dom(实例讲解)
Jan 29 Javascript
js实现两点之间画线的方法
May 12 Javascript
JavaScript数组实现数据结构中的队列与堆栈
May 26 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
Apr 13 Javascript
Angular弹出模态框的两种方式
Oct 19 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
Feb 09 Javascript
vue.js打包之后可能会遇到的坑!
Jun 03 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
JS继承最简单的理解方式
Mar 31 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
php懒人函数 自动添加数据
2011/06/28 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
深入浅出php socket编程
2015/05/13 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
Python实现简单的语音识别系统
2017/12/13 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
基于opencv实现简单画板功能
2020/08/02 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
服务员岗位职责
2014/01/29 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
健康教育评估方案
2014/05/25 职场文书
安全保证书怎么写
2015/02/28 职场文书
农业项目合作意向书
2015/05/08 职场文书
初婚未育证明样本
2015/06/18 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers