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

  问题一,在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. GDI 像素(5)

    RGB 颜色 使用 RGB 宏可以创建一个由三个整数值(R.G.B)的 COLORREF 值. COLORREF RGB( BYTE byRed, // 红色值(R) BYTE byGreen, // ...

  2. 「Poetize4」创世纪

    在tyvj上怀疑爆栈了.....或许一定是我写挂了.以后调吧... UPD:bzoj上过了... 题解:https://blog.csdn.net/popoqqq/article/details/39 ...

  3. 基于Tags的简单内容推荐的实现

    原来为了简单方便,自己小网站上的文章页的相关内容推荐就是从数据库里随机抽取数据来填充一个列表,所以一点相关性都没有,更本没有办法引导用户去访问推荐内容. 算法选择 如何能做到相似内容的推荐呢,碍于小网 ...

  4. Python-基础-day3

    基础数据类型 1.什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1 ...

  5. 使用Eclipse进行远程调控

    什么是远程调试,就是在A机器上利用Eclipse单步跟踪调试B机器上的Web应用,当然调试A机器上Web应用也是没有问题的,90%我都是调试本机的Web应用,远程调试的意义我想我不用说了,大家都会想到 ...

  6. HDU 3886

    一开始又往打表想了....不过,打表确实不好处理,转DFS. DFS有几个要注意的问题,1.对于枚举以零开始的数.我纠结了很久,最终学习别人的方法,设一个BOOL,并且假设最高一位有零,很方便.2.当 ...

  7. 自醒的觉悟与力量——leo鉴书59

    30岁之后由于看得书多起来,阅读和写作也都有了自己的套路,与此相对的写书评之前须要看几遍书,然后我才干下笔的作者和作品越来越少了. 崔卫平是这种作者,而<正义之前>是我看了两遍才開始写评的 ...

  8. windows下PTAM的编译

    前些日子在研究PTAM,以下首先说说PTAM的编译过程,我在XP几WIN7搭配vs2010中均已測试过,都能够执行. 首先下载编译PTAM所必须的库文件.下载地址我会给出 PTAM(PTAM.zip) ...

  9. [总结]FFMPEG视音频编解码零基础学习方法【转】

    本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/15811977 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFM ...

  10. Common webpart properties in kentico

    https://devnet.kentico.com/docs/7_0/devguide/index.html?common_web_part_properties.htm HTML Envelope ...