前些日子公司网站需要开发一个类似与百度文库上传文档的功能,实现文档的批量上传、展示以及继续上传的功能。开发完成后,通过在多版浏览器下的使用,发现了一系列问题,特总结于下,以免来者在这些问题上耗费太多时间。

  问题一,在IE8、9下,上传页面隐藏后无法继续上传且继续上传的按钮不再可以使用。

     原因:在IE8、9下,pupload采用的是flash上传,在上传按钮隐藏后,插件上传就会出错,也不支持在别处调用上传按钮的事件。

     解决方案:调整需求,在当前页面完成上传后再行跳转。

  问题二,在IE9下,点击上传按钮,上传返回的结果是正确的,但在脚本中无法获取到上传结果

       原因:我们开发的新功能嵌入到了老页面当中,两个页面域名不一致,需要解决跨域问题,页面一旦出现document.domain=""这种语句,就会有相应问题

解决方案:延迟使用document.domain,在上传完毕后再调用该语句。

问题三,在调用进度条事件时,返回的file对象不包含我再该对象中绑定的内容,代码如下:

      this.uploader.bind('UploadProgress', function (uploader, file) {
file.block.updateProgress(uploader.files[i]);
});

   解决方案:经过跟踪发现,在uploader参数的files中包含绑定的对象,于是搜索uploader中的相应对象,修改后的代码如下:

        //进度条事件
this.uploader.bind('UploadProgress', function (uploader, file) {
for (var i = 0; i < uploader.files.length; i++)
{
if(uploader.files[i].id===file.id)
{
uploader.files[i].block.updateProgress(uploader.files[i]);
break;
}
}
});

  以上系在开发测试过程当中遇到的主要的一些问题,下面列出我封装的上传方法,供需要的朋友参考使用:

 /*************************************
*功能:上传对象,通过该类实现上传,进度条,完成等事件的控制
*日期:2017/08/23
**************************************/
(function (d) {
var BaseUpload = function () {
this.uploader={};
this.Filelength= 0;//当前文件队列长度
this.fileDisplayArray = [];//文件节点队列
} BaseUpload.prototype = {
onload: function (option) {
this.config.bind(option);
this.fileOption = option.fileOption;//通过fileOption对象来实现上传结果的输出
this.extensions = option.extensions;//要过滤的上传内容
if (option.uploadType === "file") {
this.uploader = new plupload.Uploader(this.config);
} else if (typeof WebkitUploader !== "undefined") {
this.uploader = new WebkitUploader(this.config);
} this.uploader.init(); this.BindEvnet();
},
BindEvnet: function () {
var _this = this;
//绑定文件添加进队列事件
this.uploader.bind('FilesAdded', function (uploader, files) {
_this.FilesAdded(_this, uploader, files);
});
//进度条事件
this.uploader.bind('UploadProgress', function (uploader, file) {
for (var i = 0; i < uploader.files.length; i++)
{
if(uploader.files[i].id===file.id)
{
uploader.files[i].block.updateProgress(uploader.files[i]);
break;
}
}
});
//上传成功则回调该方法
this.uploader.callBack = function (file, jsonstr) {
_this.fileOption.complete(file, jsonstr);
};
},
FilesAdded: function (_this, uploader, files) {
if (this.fileOption.checkFiles(files, this.extensions))
{
uploader.files = this.fileOption.prepare(files);
uploader.start(); //开始自动上传
}
},
config: {
flash_swf_url: '/Content/Js/plupload/Moxie.swf',
silverlight_xap_url: '/Content/Js/plupload/Moxie.xap',
bind: function (option) {
this.url = option.url;
this.filters.extensions = option.extensions;
this.filters.init();
this.browse_button = option.browse_button;
this.multi_selection = option.multi_selection;
this.drop_element = option.drop_element;
this.init.callBack = option.callBack;
},
filters: {
init: function (extensions) {
this.mime_types = [{ title: "文档文件", extensions: this.extensions }];
},
max_file_size: '1000mb', //最大文件限制
file_size: '1250mb', //一次上传数据大小
unique_names: true, //是否自动生成唯一名称
prevent_duplicates: false //不允许队列中存在重复文件
}, multipart: true, //以multipart/form-data的形式来上传文件
multipart_params: {
'sourceid': '1'
},
max_retries: 3, //当发生plupload.HTTP_ERROR错误时的重试次数,为0时表示不重试
chunk_size: 0, //分片上传文件时,每片文件被切割成的大小,为数字时单位为字节。也可以使用一个带单位的字符串,如"200kb"。当该值为0时表示不使用分片上传功能
unique_names: false, //当值为true时会为每个上传的文件生成一个唯一的文件名,并作为额外的参数post到服务器端,参数明为name,值为生成的文件名。
file_data_name: 'file', //指定文件上传时文件域的名称,默认为file,如Request.QueryString["file"];
init: {
FileUploaded: function (up, file, info) {
if (info.response != null) {
var jsonstr = eval("(" + info.response + ")");
this.callBack(file, jsonstr);
if (!jsonstr.IsSuccess) {
$.alert(jsonstr.Message); //错误提示
};
};
},
Error: function (up, args) {
fileSize = 0;
//发生错误
if (args.file) {
if (args.file.size > 30 * 1024 * 1024) {
$.alert('上传文件大于30MB,请使用e网通上传');
}
}
this.callBack(args.file, { IsSuccess:false});
}
}
} };
window.BaseUpload = BaseUpload; })(document);

pupload上传插件问题整理的更多相关文章

  1. Plupload上传插件简单整理

    Plupload Plupload是有TinyMCE的开发者开发的,为您的内容管理系统或是类似上传程序提供一个高度可用的上传插件.Plupload 目前分为一个核心API 和一个jQuery上传队列部 ...

  2. JQuery上传插件uploadify整理(Events)

    Arguments fileThe file object being cancelled onCancel:调用calcel方法.$('#upload').uploadify('cancel'); ...

  3. JQuery上传插件uploadify整理(Options)

    下载  现在有两个版本了,我此次使用的依然是Flash版本的,虽然现在绝大部分浏览器都兼容HTMKL5,目前位置,除了做手机项目外,一般我们项目中不允许使用HTML5标签. 属性介绍(Options) ...

  4. Bootstrap FileInput 多图上传插件 文档属性说明

    Bootstrap FileInput 多图上传插件   原文链接:http://blog.csdn.net/misterwho/article/details/72886248?utm_source ...

  5. 7 款基于 JavaScript/AJAX 的文件上传插件

    本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1.  jQuer ...

  6. Bootstrap FileInput 上传 中文 API 整理

    Bootstrap FileInput 上传  中文 API 整理 上传插件有很多 但是公司用的就是 Bootstrap FileInput 自己就看了看  会用就行 自己都不知道每个值是干嘛用的就问 ...

  7. ajax如何上传文件(整理)

    ajax如何上传文件(整理) 一.总结 一句话总结:用FormData,FormData+ajax=异步上传二进制文件 <form enctype="multipart/form-da ...

  8. 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)

    今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...

  9. 强大的支持多文件上传的jQuery文件上传插件Uploadify

    支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...

随机推荐

  1. [模板]Link-Cut-Tree

    LCT模板. Orz了一下大佬的板子 Orz UPD(10.19):好像理解LCT了... LCT相当与把一个树剖分,分成实边和虚边,对于每一个实链用一个splay维护一下它的深度,然后当你想进行操作 ...

  2. 微信公众号开发之获取微信用户的openID

    (注:openID同一用户同一应用唯一,UnionID同一用户不同应用唯一.不同应用指微信开放平台下的不同用户.) 1.  申请测试号(获得appID.appsecret) 2.  填写服务器配置并验 ...

  3. VR开发2015年终总结

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50617605 作者:car ...

  4. chckBox样式的修改

    在Android开发中,系统自带的默认CheckBox由于比较简陋,可能难以满足部分人的审美需求,不过,Android具有很强的扩展性,自定义CheckBox其实也很简单. 1. Layout中定义C ...

  5. jQuery scrollFix滚动定位插件

    [插件功能] 当用户向上或向下滚动页面到一定位置时,目标元素开始固定定位(position:fixed),当回滚到原位置时目标元素恢复到原状态,可以定制触发滚动相对屏幕位置和触发滚动方向,兼容IE6 ...

  6. 【codeforces 805B】3-palindrome

    [题目链接]:http://codeforces.com/contest/805/problem/B [题意] 让你生成一个只包含a,b,c的字符串; 要求c出现的次数最少,且任意一个 长度为3的子串 ...

  7. C++ auto类型说明符

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50864612 编程时常常需要把表达式的 ...

  8. nodejs-安装及卸载

    linux下安装node 1.编译的方式安装​ 1 2 3 4 5 6 7 wget http://nodejs.org/dist/node-latest.tar.gz tar zxvf node-l ...

  9. iOS绘图系统UIKit与Core Graphics

    概述 iOS主要的绘图系统有UIKit,Core Graphics,Core Animation,Core Image,Open GL等,本片博文主要介绍UIKit与Core Graphics的绘图系 ...

  10. POJ 3709

    简单的单调队列优化,注意是哪些点加入队列即可. #include <iostream> #include <cstdio> #include <algorithm> ...