web 文件上传组件 Plupload

时间:2022-03-26 22:55:14

Plupload官网:点击打开链接   建议下载最新版本号,低版本号会出现浏览器兼容问题。

近期公司有个项目须要在web端使用多文件上传功能。刚開始准备使用HTML5来做。但是IE9下面是都不支持的,于是想到了flash,在网上搜了下各种开源的组件,最后决定使用Plupload。下面来介绍一下该组件使用时遇到的一些问题以及解决方式。

先贴出配置參数:

<script type="text/javascript">
// Initialize the widget when the DOM is ready
$(function() {
// Setup html5 version
$("#uploader").pluploadQueue({
// General settings
// General settings
runtimes : 'html5,flash,silverlight,html4',
url : 'stroage/upload',
unique_names:false,
// Maximum file size
max_file_size : '100mb',
chunk_size: '50mb',
multiple_queues :true,
// Resize images on clientside if we can
resize : {
width : 200,
height : 200,
quality : 90,
crop: true // crop to exact dimensions
}, // Specify what files to browse for
filters : [
{ title : "*", extensions : "*" }
], // Rename files by clicking on their titles
rename: false, // Enable ability to drag'n'drop files onto the widget (currently only HTML5 supports that)
dragdrop: false, // Views to activate
views: {
list: true,
thumbs: true, // Show thumbs
active: 'thumbs'
}, // Flash settings
flash_swf_url : 'plupload/js/Moxie.swf', // Silverlight settings
silverlight_xap_url : 'plupload/js/Moxie.xap'
});
});
</script>

效果图:

aaarticlea/png;base64,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" alt="" />

使用2.13版本号。上传一个大于1M的文件时候。Plupload自己主动将我文件名称改成了 blob,官方论坛上也有非常多人贴出了这个问题,也有不少的解决方式。

1、改动源代码

2、不正确文件进行分块,将chunk_size设置为0

3、将chunk_size的值设大

我使用前两种方式都未解决这个问题。最后将chunk_size设置为50mb,完美解决这个问题,详细原因不得而知。

使用过程中,想给文件加入上传速率。须要改动源代码,不废话。直接上代码

target.prepend(
'<div class="plupload_wrapper plupload_scroll">' +
'<div id="' + id + '_container" class="plupload_container">' +
'<div class="plupload">'+ '<div class="plupload_content">' +
'<div class="plupload_filelist_header">' +
'<div class="plupload_file_name">' + _('Filename') + '</div>' +
'<div class="plupload_file_action"> </div>' +
'<div class="plupload_file_status"><span>' + _('Status') + '</span></div>' +
'<div class="plupload_file_size">' + _('Size') + '</div>' +
'<div class="plupload_clearer"> </div>' +
'</div>' + '<ul id="' + id + '_filelist" class="plupload_filelist"></ul>' + '<div class="plupload_filelist_footer">' +
'<div class="plupload_file_name">' +
'<div class="plupload_buttons">' +
'<a href="#" class="plupload_button plupload_add" id="' + id + '_browse">' + _('Add Files') + '</a>' +
'<a href="#" class="plupload_button plupload_start">' + _('Start Upload') + '</a>' +
'</div>' +
'<span class="plupload_upload_status"></span>' +
'</div>' +
'<div class="plupload_file_action"></div>' +
'<span style="margin-left: 120px;" class="plupload_total_bytespersec">0kb/sec</span> '+
'<div class="plupload_file_status"><span class="plupload_total_status">0%</span></div>' +
'<div class="plupload_file_size"><span class="plupload_total_file_size">0 b</span></div>' +
'<div class="plupload_progress">' +
'<div class="plupload_progress_container">' +
'<div class="plupload_progress_bar"></div>' +
'</div>' +
'</div>' +
'<div class="plupload_clearer"> </div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'<input type="hidden" id="' + id + '_count" name="' + id + '_count" value="0" />' +
'</div>'
);

function updateTotalProgress() {
$('span.plupload_total_bytespersec', target).html(parseInt(uploader.total.bytesPerSec/1024)+" kb/sec");
$('span.plupload_total_status', target).html(uploader.total.percent + '%');
$('div.plupload_progress_bar', target).css('width', uploader.total.percent + '%');
$('span.plupload_upload_status', target).html(
o.sprintf(_('Uploaded %d/%d files'), uploader.total.uploaded, uploader.files.length)
);
}

下面介绍下Plupload配置參数

实例化一个plupload对象时,也就是 new plupload.Uploader(),须要传入一个对象作为配置參数。

后面内容中出现的plupload实例均是指new plupload.Uploader()得到的实例对象

属性 类型 默认值 描写叙述
browse_button String / DOM   触发文件选择对话框的DOM元素,当点击该元素后便后弹出文件选择对话框。该值能够是DOM元素对象本身。也能够是该DOM元素的id
url String   server端接收和处理上传文件的脚本地址。能够是相对路径(相对于当前调用Plupload的文档),也能够是绝对路径
filters Object { } 能够使用该參数来限制上传文件的类型。大小等,该參数以对象的形式传入。它包含三个属性:

mime_types:用来限定上传文件的类型,为一个数组。该数组的每个元素又是一个对象,该对象有title和extensions两个属性。title为该过滤器的名称,extensions为文件扩展名。有多个时用逗号隔开。该属性默觉得一个空数组,即不做限制。

max_file_size:用来限定上传文件的大小,假设文件体积超过了该值,则不能被选取。值能够为一个数字,单位为b,也能够是一个字符串,由数字和单位组成,如'200kb'

prevent_duplicates:是否同意选取反复的文件,为true时表示不同意,为false时表示同意,默觉得false。假设两个文件的文件名称和大小都同样,则会被觉得是反复的文件

filters完整的配置示比例如以下(当然也能够仅仅配置当中的某一项):

filters: {
mime_types : [ //仅仅同意上传图片和zip文件
{ title : "Image files", extensions : "jpg,gif,png" },
{ title : "Zip files", extensions : "zip" }
],
max_file_size : '400kb', //最大仅仅能上传400kb的文件
prevent_duplicates : true //不同意选取反复文件
}
headers Object   设置上传时的自己定义头信息,以键/值对的形式传入,键代表头信息属性名,键代表属性值。

html4上传方式不支持设置该属性。

multipart Boolean true true时将以multipart/form-data的形式来上传文件,为false时则以二进制的格式来上传文件。

html4上传方式不支持以二进制格式来上传文件。在flash上传方式中,二进制上传也有点问题。

而且二进制格式上传还须要在server端做特殊的处理。

一般我们用multipart/form-data的形式来上传文件就足够了。

multipart_params Object   上传时的附加參数,以键/值对的形式传入,server端但是使用$_POST来获取这些參数(以php为例)。比方:
multipart_params: {
one: '1',
two: '2',
three: { //值还能够是一个字面量对象
a: '4',
b: '5'
},
four: ['6', '7', '8'] //也能够是一个数组
}
max_retries Number 0 当发生plupload.HTTP_ERROR错误时的重试次数,为0时表示不重试
chunk_size Number/String 0 分片上传文件时,每片文件被分割成的大小,为数字时单位为字节。也能够使用一个带单位的字符串。如"200kb"。当该值为0时表示不使用分片上传功能
resize Object   能够使用该參数对将要上传的图片进行压缩,该參数是一个对象,里面包含5个属性:

width:指定压缩后图片的宽度,假设没有设置该属性则默觉得原始图片的宽度

height:指定压缩后图片的高度。假设没有设置该属性则默觉得原始图片的高度

crop:是否裁剪图片

quality:压缩后图片的质量,仅仅对jpg格式的图片有效。默觉得90。quality能够跟widthheight一起使用。但也能够单独使用,单独使用时,压缩后图片的宽高不会变化,但由于质量减少了,所以体积也会变小

preserve_headers:压缩后是否保留图片的元数据,true为保留,false为不保留,默觉得true。删除图片的元数据能使图片的体积减小一点点

resize參数的配置示比例如以下:

resize: {
width: 100,
height: 100,
crop: true,
quality: 60,
preserve_headers: false
}
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到server端。參数明为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)

uploader为当前的plupload实例对象

PostInit
当Init事件发生后触发

监听函数參数:(uploader)

uploader为当前的plupload实例对象

OptionChanged
当使用Plupload实例的setOption()方法改变当前配置參数后触发

监听函数參数:(uploader,option_name,new_value,old_value)

uploader为当前的plupload实例对象,option_name为发生改变的參数名称,new_value为改变后的值,old_value为改变前的值

Refresh
当调用plupload实例的refresh()方法后会触发该事件,临时不清楚还有什么其它动作会触发该事件,但据我測试,把文件加入到上传队列后也会触发该事件。

监听函数參数:(uploader)

uploader为当前的plupload实例对象

StateChanged
当上传队列的状态发生改变时触发

监听函数參数:(uploader)

uploader为当前的plupload实例对象

UploadFile
当上传队列中某一个文件開始上传后触发

监听函数參数:(uploader,file)

uploader为当前的plupload实例对象,file为触发此事件的文件对象

BeforeUpload
当队列中的某一个文件正要開始上传前触发

监听函数參数:(uploader,file)

uploader为当前的plupload实例对象,file为触发此事件的文件对象

QueueChanged
当上传队列发生变化后触发,即上传队列新增了文件或移除了文件。QueueChanged事件会比FilesAdded或FilesRemoved事件先触发

监听函数參数:(uploader)

uploader为当前的plupload实例对象

UploadProgress
会在文件上传过程中不断触发,能够用此事件来显示上传进度

监听函数參数:(uploader,file)

uploader为当前的plupload实例对象,file为触发此事件的文件对象

FilesRemoved
当文件从上传队列移除后触发

监听函数參数:(uploader,files)

uploader为当前的plupload实例对象,files为一个数组,里面的元素为本次事件所移除的文件对象

FileFiltered
暂不清楚该事件的意义,但依据測试得出,该事件会在每个文件被加入到上传队列前触发

监听函数參数:(uploader,file)

uploader为当前的plupload实例对象。file为触发此事件的文件对象

FilesAdded
当文件加入到上传队列后触发

监听函数參数:(uploader,files)

uploader为当前的plupload实例对象,files为一个数组。里面的元素为本次加入到上传队列里的文件对象

FileUploaded
当队列中的某一个文件上传完毕后触发

监听函数參数:(uploader,file,responseObject)

uploader为当前的plupload实例对象。file为触发此事件的文件对象,responseObject为server返回的信息对象,它有下面3个属性:

response:server返回的文本

responseHeaders:server返回的头信息

status:server返回的http状态码,比方200

ChunkUploaded
当使用文件小片上传功能时,每个小片上传完毕后触发

监听函数參数:(uploader,file,responseObject)

uploader为当前的plupload实例对象,file为触发此事件的文件对象,responseObject为server返回的信息对象,它有下面5个属性:

offset:该文件小片在总体文件里的偏移量

response:server返回的文本

responseHeaders:server返回的头信息

status:server返回的http状态码,比方200

total:该文件(指的是被分割成了很多文件小片的那个文件)的总大小,单位为字节

UploadComplete
当上传队列中全部文件都上传完毕后触发

监听函数參数:(uploader,files)

uploader为当前的plupload实例对象。files为一个数组,里面的元素为本次已完毕上传的全部文件对象

Error
当错误发生时触发

监听函数參数:(uploader,errObject)

uploader为当前的plupload实例对象。errObject为错误对象。它至少包含下面3个属性(由于不同类型的错误。属性可能会不同):

code:错误代码。详细请參考plupload上定义的表示错误代码的常量属性

file:与该错误相关的文件对象

message:错误信息

Destroy
当调用destroy方法时触发

监听函数參数:(uploader)

uploader为当前的plupload实例对象

三、Plupload实例的属性

属性 描写叙述
id Plupload实例的唯一标识id
state 当前的上传状态,可能的值为plupload.STARTEDplupload.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的文件浏览按钮,參数disabletrue时为禁用,为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.QUEUEDplupload.UPLOADINGplupload.FAILEDplupload.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所能处理的最大值时的错误代码