plupload使用指南(转)
转自http://www.cnblogs.com/2050/p/3913184.html
现在随着html5技术的逐渐推广和普及,再去使用以flash为上传手段的SWFUpload显然就有点过时了,毕竟html5原生的就给我们提供了文件上传的API。Plupload是一款由著名的web编辑器TinyMCE团队开发的上传组件,简单易用且功能强大,我们完全可以使用Plupload来代替以前的SWFUpload。
Plupload有以下功能和特点:
1、拥有多种上传方式:HTML5、flash、silverlight以及传统的<input type=”file” />。Plupload会自动侦测当前的环境,选择最合适的上传方式,并且会优先使用HTML5的方式。所以你完全不用去操心当前的浏览器支持哪些上传方式,Plupload会自动为你选择最合适的方式。
2、支持以拖拽的方式来选取要上传的文件
3、支持在前端压缩图片,即在图片文件还未上传之前就对它进行压缩
4、可以直接读取原生的文件数据,这样的好处就是例如可以在图片文件还未上传之前就能把它显示在页面上预览
5、支持把大文件切割成小片进行上传,因为有些浏览器对很大的文件比如几G的一些文件无法上传。
Plupload的使用方法也与SWFUpload非常类似,可以分为以下几步:
1、引入js文件,plupload的源文件可以到github上去下载
2、实例化一个plupload对象,传入一个配置参数对象进行各方面的配置。
3、调用plupload实例对象的init()方法进行初始化
4、在plupload实例对象上注册各种你需要的事件。plupload从选取文件到文件上传完成这个过程中,会触发很多事件。我们可以通过这些事件来跟plupload进行交互。
5、实现你自己所注册的那些事件的监听函数,利用这些监听函数来进行更新UI、提示上传进度等工作。
大家可以到http://chaping.github.io/plupload/demo/看一下我写的关于plupload的几个上传demo。
下面用一段代码来说明Plupload的使用方法。
首先看下我的目录结构
index.html的代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Plupload使用指南</title>
<!-- 首先需要引入plupload的源代码 -->
<script src="js/plupload.full.min.js"></script>
</head>
<body>
<!-- 这里我们只使用最基本的html结构:一个选择文件的按钮,一个开始上传文件的按钮(甚至该按钮也可以不要) -->
<p>
<button id="browse">选择文件</button>
<button id="start_upload">开始上传</button>
</p>
<script> //实例化一个plupload上传对象
var uploader = new plupload.Uploader({
browse_button : 'browse', //触发文件选择对话框的按钮,为那个元素id
url : 'upload.php', //服务器端的上传页面地址
flash_swf_url : 'js/Moxie.swf', //swf文件,当需要使用swf方式进行上传时需要配置该参数
silverlight_xap_url : 'js/Moxie.xap' //silverlight文件,当需要使用silverlight方式进行上传时需要配置该参数
}); //在实例对象上调用init()方法进行初始化
uploader.init(); //绑定各种事件,并在事件监听函数中做你想做的事
uploader.bind('FilesAdded',function(uploader,files){
//每个事件监听函数都会传入一些很有用的参数,
//我们可以利用这些参数提供的信息来做比如更新UI,提示上传进度等操作
});
uploader.bind('UploadProgress',function(uploader,file){
//每个事件监听函数都会传入一些很有用的参数,
//我们可以利用这些参数提供的信息来做比如更新UI,提示上传进度等操作
});
//......
//...... //最后给"开始上传"按钮注册事件
document.getElementById('start_upload').onclick = function(){
uploader.start(); //调用实例对象的start()方法开始上传文件,当然你也可以在其他地方调用该方法
} </script>
</body>
</html>
使用Plupload的关键是了解它众多的配置参数、事件以及属性和方法。我把它官网上的文档翻译成了中文并整理如下。我也把它放到了github上,你可以到http://chaping.github.io/plupload/doc/去查阅。
目录:
一、配置参数
实例化一个plupload对象时,也就是 new plupload.Uploader()
,需要传入一个对象作为配置参数。后面内容中出现的plupload实例均是指new plupload.Uploader()
得到的实例对象
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
browse_button | String / DOM | 触发文件选择对话框的DOM元素,当点击该元素后便后弹出文件选择对话框。该值可以是DOM元素对象本身,也可以是该DOM元素的id | |
url | String | 服务器端接收和处理上传文件的脚本地址,可以是相对路径(相对于当前调用Plupload的文档),也可以是绝对路径 | |
filters | Object | { } | 可以使用该参数来限制上传文件的类型,大小等,该参数以对象的形式传入,它包括三个属性:
mime_types:用来限定上传文件的类型,为一个数组,该数组的每个元素又是一个对象,该对象有title和extensions两个属性,title为该过滤器的名称,extensions为文件扩展名,有多个时用逗号隔开。该属性默认为一个空数组,即不做限制。 max_file_size:用来限定上传文件的大小,如果文件体积超过了该值,则不能被选取。值可以为一个数字,单位为b,也可以是一个字符串,由数字和单位组成,如'200kb' prevent_duplicates:是否允许选取重复的文件,为true时表示不允许,为false时表示允许,默认为false。如果两个文件的文件名和大小都相同,则会被认为是重复的文件 filters完整的配置示例如下(当然也可以只配置其中的某一项): filters: { |
headers | Object | 设置上传时的自定义头信息,以键/值对的形式传入,键代表头信息属性名,键代表属性值。html4上传方式不支持设置该属性。 | |
multipart | Boolean | true | 为true 时将以multipart/form-data 的形式来上传文件,为false时则以二进制的格式来上传文件。html4上传方式不支持以二进制格式来上传文件,在flash上传方式中,二进制上传也有点问题。并且二进制格式上传还需要在服务器端做特殊的处理。一般我们用multipart/form-data的形式来上传文件就足够了。 |
multipart_params | Object | 上传时的附加参数,以键/值对的形式传入,服务器端可是使用$_POST来获取这些参数(以php为例)。比如:
multipart_params: { |
|
max_retries | Number | 0 | 当发生plupload.HTTP_ERROR 错误时的重试次数,为0时表示不重试 |
chunk_size | Number/String | 0 | 分片上传文件时,每片文件被切割成的大小,为数字时单位为字节。也可以使用一个带单位的字符串,如"200kb" 。当该值为0时表示不使用分片上传功能 |
resize | Object | 可以使用该参数对将要上传的图片进行压缩,该参数是一个对象,里面包括5个属性:
width:指定压缩后图片的宽度,如果没有设置该属性则默认为原始图片的宽度 height:指定压缩后图片的高度,如果没有设置该属性则默认为原始图片的高度 crop:是否裁剪图片 quality:压缩后图片的质量,只对jpg格式的图片有效,默认为90。 preserve_headers:压缩后是否保留图片的元数据, resize参数的配置示例如下: resize: { |
|
drop_element | DOM/String/Array | 指定了使用拖拽方式来选择上传文件时的拖拽区域,即可以把文件拖拽到这个区域的方式来选择文件。该参数的值可以为一个DOM元素的id,也可是DOM元素本身,还可以是一个包括多个DOM元素的数组。如果不设置该参数则拖拽上传功能不可用。目前只有html5上传方式才支持拖拽上传。 | |
multi_selection | Boolean | true | 是否可以在文件浏览对话框中选择多个文件,true为可以,false为不可以。默认true,即可以选择多个文件。需要注意的是,在某些不支持多选文件的环境中,默认值是false。比如在ios7的safari浏览器中,由于存在bug,造成不能多选文件。当然,在html4上传方式中,也是无法多选文件的。 |
required_features | Mix | 可以使用该参数来设置你必须需要的一些功能特征,Plupload会根据你的设置来选择合适的上传方式。因为,不同的上传方式,支持的功能是不同的,比如拖拽上传只有html5上传方式支持,图片压缩则只有html5,flash,silverlight上传方式支持。该参数的值是一个混合类型,可以是一个以逗号分隔的字符串, | |
unique_names | Boolean | false | 当值为true时会为每个上传的文件生成一个唯一的文件名,并作为额外的参数post到服务器端,参数明为name ,值为生成的文件名。 |
runtimes | String | html5,flash, silverlight, html4 |
用来指定上传方式,指定多个上传方式请使用逗号隔开。一般情况下,你不需要配置该参数,因为Plupload默认会根据你的其他的参数配置来选择最合适的上传方式。如果没有特殊要求的话,Plupload会首先选择html5上传方式,如果浏览器不支持html5,则会使用flash或silverlight,如果前面两者也都不支持,则会使用最传统的html4上传方式。如果你想指定使用某个上传方式,或改变上传方式的优先顺序,则你可以配置该参数。 |
file_data_name | String | file | 指定文件上传时文件域的名称,默认为file ,例如在php中你可以使用$_FILES['file'] 来获取上传的文件信息 |
container | DOM/String | 用来指定Plupload所创建的html结构的父容器,默认为前面指定的browse_button 的父元素。该参数的值可以是一个元素的id,也可以是DOM元素本身。 |
|
flash_swf_url | String | js/Moxie.swf | flash上传组件的url地址,如果是相对路径,则相对的是调用Plupload的html文档。当使用flash上传方式会用到该参数。 |
silverlight_xap_url | String | js/Moxie.xap | silverlight上传组件的url地址,如果是相对路径,则相对的是调用Plupload的html文档。当使用silverlight上传方式会用到该参数。 |
二、各种事件说明
要了解plupload的运行状况,靠的就是在这些事件了
Init |
---|
当Plupload初始化完成后触发
监听函数参数:(uploader)
|
PostInit |
当Init事件发生后触发
监听函数参数:(uploader)
|
OptionChanged |
当使用Plupload实例的setOption()方法改变当前配置参数后触发
监听函数参数:(uploader,option_name,new_value,old_value)
|
Refresh |
当调用plupload实例的refresh()方法后会触发该事件,暂时不清楚还有什么其他动作会触发该事件,但据我测试,把文件添加到上传队列后也会触发该事件。
监听函数参数:(uploader)
|
StateChanged |
当上传队列的状态发生改变时触发
监听函数参数:(uploader)
|
UploadFile |
当上传队列中某一个文件开始上传后触发
监听函数参数:(uploader,file)
|
BeforeUpload |
当队列中的某一个文件正要开始上传前触发
监听函数参数:(uploader,file)
|
QueueChanged |
当上传队列发生变化后触发,即上传队列新增了文件或移除了文件。QueueChanged事件会比FilesAdded或FilesRemoved事件先触发
监听函数参数:(uploader)
|
UploadProgress |
会在文件上传过程中不断触发,可以用此事件来显示上传进度
监听函数参数:(uploader,file)
|
FilesRemoved |
当文件从上传队列移除后触发
监听函数参数:(uploader,files)
|
FileFiltered |
暂不清楚该事件的意义,但根据测试得出,该事件会在每一个文件被添加到上传队列前触发
监听函数参数:(uploader,file)
|
FilesAdded |
当文件添加到上传队列后触发
监听函数参数:(uploader,files)
|
FileUploaded |
当队列中的某一个文件上传完成后触发
监听函数参数:(uploader,file,responseObject)
response:服务器返回的文本 responseHeaders:服务器返回的头信息 status:服务器返回的http状态码,比如200 |
ChunkUploaded |
当使用文件小片上传功能时,每一个小片上传完成后触发
监听函数参数:(uploader,file,responseObject)
offset:该文件小片在整体文件中的偏移量 response:服务器返回的文本 responseHeaders:服务器返回的头信息 status:服务器返回的http状态码,比如200 total:该文件(指的是被切割成了许多文件小片的那个文件)的总大小,单位为字节 |
UploadComplete |
当上传队列中所有文件都上传完成后触发
监听函数参数:(uploader,files)
|
Error |
当发生错误时触发
监听函数参数:(uploader,errObject)
code:错误代码,具体请参考plupload上定义的表示错误代码的常量属性 file:与该错误相关的文件对象 message:错误信息 |
Destroy |
当调用destroy方法时触发
监听函数参数:(uploader)
|
三、Plupload实例的属性
属性 | 描述 |
---|---|
id | Plupload实例的唯一标识id |
state | 当前的上传状态,可能的值为plupload.STARTED 或plupload.STOPPED ,该值由Plupload实例的stop() 或statr() 方法控制。默认为plupload.STOPPED |
runtime | 当前使用的上传方式 |
files | 当前的上传队列,是一个由上传队列中的文件对象组成的数组 |
settings | 当前的配置参数对象 |
total | 表示总体进度信息的QueueProgress对象 |
四、Plupload实例的方法
方法 | 描述 |
---|---|
init() | 初始化Plupload实例 |
setOption(option, [value]) | 设置某个特定的配置参数,option为参数名称,value为要设置的参数值。option也可以为一个由参数名和参数值键/值对组成的对象,这样就可以一次设定多个参数,此时该方法的第二个参数value会被忽略。 |
getOption([option]) | 获取当前的配置参数,参数option为需要获取的配置参数名称,如果没有指定option,则会获取所有的配置参数 |
refresh() | 刷新当前的plupload实例,暂时还不明白什么时候需要使用 |
start() | 开始上传队列中的文件 |
stop() | 停止队列中的文件上传 |
disableBrowse(disable) | 禁用或启用plupload的文件浏览按钮,参数disable 为true 时为禁用,为false 时为启用。默认为true |
getFile(id) | 通过id来获取文件对象 |
addFile(file, [fileName]) | 向上传队列中添加文件,如果成功添加了文件,会触发FilesAdded 事件。参数file为要添加的文件,可以是一个原生的文件,或者一个plupload文件对象,或者一个input[type="file"] 元素,还可以是一个包括前面那几种东西的数组;fileName为给该文件指定的名称 |
removeFile(file) | 从上传队列中移除文件,参数file 为plupload文件对象或先前指定的文件名称 |
splice(start, length) | 从上传队列中移除一部分文件,start 为开始移除文件在队列中的索引,length 为要移除的文件的数量,该方法的返回值为被移除的文件。该方法会触发FilesRemoved 和QueueChanged 事件 |
trigger(name, Multiple) | 触发某个事件。name 为要触发的事件名称,Multiple 为传给该事件监听函数的参数,是一个对象 |
hasEventListener(name) | 用来判断某个事件是否有监听函数,name 为事件名称 |
bind(name, func, scope) | 给某个事件绑定监听函数,name 为事件名,func 为监听函数,scope 为监听函数的作用域,也就是监听函数中this的指向 |
unbind(name, func) | 移除事件的监听函数,name 为事件名称,func 为要移除的监听函数 |
unbindAll() | 移除所有事件的所有监听函数 |
destroy() | 销毁plupload实例 |
五、文件对象的属性和方法
在很多事件监听函数中,都会提供文件对象给你
属性/方法 | 描述 |
---|---|
id | 文件id |
name | 文件名,例如"myfile.gif" |
type | 文件类型,例如"image/jpeg" |
size | 文件大小,单位为字节,当启用了客户端压缩功能后,该值可能会改变 |
origSize | 文件的原始大小,单位为字节 |
loaded | 文件已上传部分的大小,单位为字节 |
percent | 文件已上传部分所占的百分比,如50就代表已上传了50% |
status | 文件的状态,可能为以下几个值之一:plupload.QUEUED , plupload.UPLOADING , plupload.FAILED , plupload.DONE |
lastModifiedDate | 文件最后修改的时间 |
getNative() | 获取原生的文件对象 |
getSource() | 获取mOxie.File 对象,想了解mOxie是什么东西,可以看下https://github.com/moxiecode/moxie/wiki/API |
destroy() | 销毁文件对象 |
六、QueueProgress 对象的属性
plupload实例的total属性是一个QueueProgress对象
属性 | 描述 |
---|---|
size | 上传队列中所有文件加起来的总大小,单位为字节 |
loaded | 队列中当前已上传文件加起来的总大小,单位为字节 |
uploaded | 已完成上传的文件的数量 |
failed | 上传失败的文件数量 |
queued | 队列中剩下的(也就是除开已经完成上传的文件)需要上传的文件数量 |
percent | 整个队列的已上传百分比,如50就代表50% |
bytesPerSec | 上传速率,单位为 byte/s,也就是 字节/秒 |
七、plupload命名空间上的一些属性
plupload的命名空间上有一些属性,用来表示一些常量。记住,不是plupload实例的属性,而是plupload的属性
属性名称 | 描述 |
---|---|
VERSION | 当前plupload的版本号 |
STOPPED | 值为1,代表上传队列还未开始上传或者上传队列中的文件已经上传完毕时plupload实例的state 属性值 |
STARTED | 值为2,代表队列中的文件正在上传时plupload实例的state 属性值 |
QUEUED | 值为1,代表某个文件已经被添加进队列等待上传时该文件对象的status 属性值 |
UPLOADING | 值为2,代表某个文件正在上传时该文件对象的status 属性值 |
FAILED | 值为4,代表某个文件上传失败后该文件对象的status 属性值 |
DONE | 值为5,代表某个文件上传成功后该文件对象的status 属性值 |
GENERIC_ERROR | 值为-100,发生通用错误时的错误代码 |
HTTP_ERROR | 值为-200,发生http网络错误时的错误代码,例如服务气端返回的状态码不是200 |
IO_ERROR | 值为-300,发生磁盘读写错误时的错误代码,例如本地上某个文件不可读 |
SECURITY_ERROR | 值为-400,发生因为安全问题而产生的错误时的错误代码 |
INIT_ERROR | 值为-500,初始化时发生错误的错误代码 |
FILE_SIZE_ERROR | 值为-600,当选择的文件太大时的错误代码 |
FILE_EXTENSION_ERROR | 值为-601,当选择的文件类型不符合要求时的错误代码 |
FILE_DUPLICATE_ERROR | 值为-602,当选取了重复的文件而配置中又不允许有重复文件时的错误代码 |
IMAGE_FORMAT_ERROR | 值为-700,发生图片格式错误时的错误代码 |
IMAGE_MEMORY_ERROR | 当发生内存错误时的错误代码 |
IMAGE_DIMENSIONS_ERROR | 值为-702,当文件大小超过了plupload所能处理的最大值时的错误代码 |
---恢复内容结束---
plupload使用指南(转)的更多相关文章
- 前端上传组件Plupload使用指南
我之前写过一篇文章<文件上传利器SWFUpload使用指南>,里面介绍了上传组件SWFUpload的使用方法,但现在随着html5技术的逐渐推广和普及,再去使用以flash为上传手段的SW ...
- 【转】前端上传组件Plupload使用指南
http://www.cnblogs.com/2050/p/3913184.html Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的 ...
- [Pulgin] 前端上传组件Plupload使用指南
我之前写过一篇文章<文件上传利器SWFUpload使用指南>,里面介绍了上传组件SWFUpload的使用方法,但现在随着html5技术的逐渐推广和普及,再去使用以flash为上传手段的SW ...
- 前端上传视频、图片、文件等大文件 组件Plupload使用指南
demo:https://blog.csdn.net/qq_30100043/article/details/78491993 Plupload上传插件中文帮助文档网址:http://www.phpi ...
- Plupload 上传控件使用指南
本文转载至(感谢原作者分享):http://www.cnblogs.com/2050/p/3913184.html#plupload_doc2 我之前写过一篇文章<文件上传利器SWFUpload ...
- 文件上传利器SWFUpload使用指南(转)
http://www.cnblogs.com/2050/archive/2012/08/29/2662932.html 文件上传利器SWFUpload使用指南 SWFUpload是一个flash和js ...
- 多图片/文件上传 - SwfUpload/PlUpload
<文件上传利器SWFUpload使用指南> <前端上传组件Plupload使用指南>
- SWFUpload多文件上传使用指南
SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大.以前在项目中用过几次,但它的配置参数太多了,用过后就忘记怎么用了,到以后要用时又得到官网上看它的文档,真是太烦了.所以 ...
- Plupload设置自定义参数
在HTML 5比较流行的当下,Plupload是文件上传的不二之选,特别是Adobe宣布2020年将停止对Flash的更新支持.本文记录一下如何在上传文件的时候,传递自定义参数. 了解到两种方式,一种 ...
随机推荐
- [wikioi]乌龟棋
http://wikioi.com/problem/1068/ 多重背包.边界f[0,0,0,0]=a[1](初始时没有用任何卡片,获得棋盘第一格的分数)DP方程:f[i,j,k,l]=max(f[i ...
- bzoj1231
看到n<=16不难想到状压dp 我们用二进制表示前x个位置,哪些牛被已经被选过了 这里我们可以通过穷举二进制数的顺序来转移 所以二维就够了 ..] of longint; f:.. sh ...
- 如何在多线程中调用winform窗体控件
由于 Windows 窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态.还可能出现其他与线程相关的 bug,包 ...
- WebView loadData出错(奇怪的设计)
今天遇到一个奇怪的问题. 我使用WebView加载一个网页. 方法1. 直接使用 loadUrl() 方法,没有问题.完全可以.方法2. 使用loadData()方法,出现问题,无法显示.方法3. ...
- Java---replace与replaceAll的区别
乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样. 这两者很容易搞混,在这里详细讲述下. ...
- Unity优化之纹理集
发现了一个比较好用的插件:ProDrawCallOptimizer. 它是用来合并纹理和材质的,而且用起来非常简便. 操作方法: 1.将包拖入Unity5中:ps:由于版本问题,直接双击包时导入不了 ...
- Red5空项目的理解
在经过三天的苦恼之后,我终于对Red5的工作流程有点了解了.这样一来对要做的项目总算不会太瞎了.出于个人感受,认为下面所讲述的内容对初学者理解Red5以及基于Red5开发有很大的帮助,因此记录下来. ...
- 2013 ACM区域赛长沙 C Collision HDU 4793
题意:在平面上0,0点,有一个半径为R的圆形区域,并且在0,0点固定着一个半径为RM(<R)的圆形障碍物,现在圆形区域外x,y,有一个半径 为r的,并且速度为vx,vy的硬币,如果硬币碰到了障碍 ...
- parseSdkContent failed Could not initialize class android.graphics.Typeface
Deleting ".android" is temporarily fixing the problem with me as after sometime it begins ...
- dell vfoglight
vFoglight针对RH/Vmware/Hyper-v/Vsphere环境的相关软件包下载链接 https://software.dell.com/register/getfile/?param=2 ...