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

  问题一,在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. 【JavaScript框架封装】JavaScript中的文本字符串的转义和反转义的实现

    如果是想把本地的一个字符串串存到服务器,再次取出来的还是文本的话,就需要这个文本字符串的转义: /** * 对一个字符串的转义 * @param str * @return {*} */ functi ...

  2. 洛谷P1567 统计天数

    题目背景 统计天数 题目描述 炎热的夏日,KC非常的不爽.他宁可忍受北极的寒冷,也不愿忍受厦门的夏天.最近,他开始研究天气的变化.他希望用研究的结果预测未来的天气. 经历千辛万苦,他收集了连续N(1& ...

  3. Django用户认证(四)自定义认证Customizing authentication

    原文:https://www.cnblogs.com/linxiyue/p/4061044.html 扩展已有的用户模型Extending the existing User model 有两种方法来 ...

  4. 免费ftp服务器FileZilla Server配置

    FileZilla Server下载安装完成后,必须启动软件进行设置,由于此软件是英文,本来就是一款陌生的软件,再加上英文,配置难度可想而知,小编从网上找到一篇非常详细的教程进行整理了一番,确保读到这 ...

  5. [HTML5] Handle Offscreen Accessibility

    Sometime when some component is offscreen, but still get focus when we tab though the page. This can ...

  6. 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)

    这一次我们深入的学习一下JavaScript面向对象技术,在学习之前,必要的说明一下一些面向对象的一些术语. 这也是全部面对对象语言所拥有的共同点.有这样几个面向对象术语: 对象 ECMA-262把对 ...

  7. NAT配置

    静态NAT Router(config)#ip nat inside source static tcp 192.168.100.2 61.159.62.131   指定地址转换映射 Router(c ...

  8. JSP页面标签

    1.EL表达式中empty的用法 EL表达式中empty的用法 <c:if test="${! empty key}">${key}</c:if> < ...

  9. kentico中的page template的使用

    父页面使用自己的template 子页面,也使用自己的template. 然后父页面中需要添加一个place holder. 子页面的继承,选择inherit only master page. 这样 ...

  10. 机器学习 LR中的参数迭代公式推导——极大似然和梯度下降

    Logistic本质上是一个基于条件概率的判别模型(DiscriminativeModel). 函数图像为: 通过sigma函数计算出最终结果,以0.5为分界线,最终结果大于0.5则属于正类(类别值为 ...