# shardUpload **Repository Path**: hackchen/shardUpload ## Basic Information - **Project Name**: shardUpload - **Description**: HTML5 大文件分片上传 原地址:https://github.com/Mueat/shardUpload.git - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-07-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # shardUpload HTML5 大文件分片上传 #快速使用 ```html ``` ```javascript ``` #使用说明 ``` shardUpload.init(elementID,uploadUrl,config) ``` - elementID 绑定的元素ID,绑定后点击这个元素会出现选择文件框 - uploadUrl 上传的服务端地址 - config 配置参数 在绑定的元素上设置 data-shardUpload属性,则在上传成功后,会将对应元素的value设置为服务返回的数据,如上面的例子中,上传成功后,会吧video的value设置为服务器返回的数据(shard.php返回的数据为合并后的文件的路劲) #config说明 - exts 允许上传的文件类型,多种类型用 | 分割,如:mp4|flv|avi - chunk 每个碎片分割的大小,默认值2M。如:设置1024*1024表示每个碎片为1M(注:以B为单位,不是以M为单位) - async 同时并行上传的碎片数,默认值1个 - token 上传令牌,将token传给服务端,服务端可以验证后再上传 - parame 其他需要传给服务端的参数,如:{id:5,category_id:16} - callback 回调函数,下面有详细说明, #callback回调函数 ``` callback(file,message,status) ``` - file 文件选择框内的原始文件对象,可以通过file.size获取文件大小 file.name获取文件名称等等 - message 传入的提示信息/结果,如:上传错误或上传成功后服务器返回的信息 - status 状态/信息类型,通过判断status来执行不同的操作 ```javascript function myCallback(file,message,status){ //当设置了回调函数后,默认的上传进度条将不会显示,如果要让进度条显示,则调用shardUpload.tipDisplay(message,status) shardUpload.tipDisplay(message,status) //显示默认的进度条 if(status == 'success') { //当status为success的时候,message返回的是服务端合并文件后返回的信息,一般为合并的文件名称 document.getElementById('output').innerHTML = message }else if(status == 'process'){ //当status为process的时候,返回当前上传进度,返回0-100 document.getElementById('output').innerHTML = message + '%'; }else if(status == 'merge'){ //当status为merge时,文件上传完成,通知服务端开始合并文件,message为正在合并文件 document.getElementById('output').innerHTML = message; }else if(status == 'failed'){ //文件上传失败 }else if(status == 'cancel'){ //文件上传取消 }else if(status == 'error'){ //文件格式不正确 } } //全部参数都设置的使用方法 shardUpload.init('upload-btn','shard.php',{ exts:'mp4|flv', //只允许上传mp4或flv格式 chunk:4*1024*1024, //按4M分割 async:5,//允许同时上传5个碎片 token:'', //上传token为session内的token,服务器端判断 $_POST['shard-token'] == $_SESSION['uptoken'] param:{id:5,category_id:10}, //其他参数,服务器端获取 $_POST['id']/$_POST['category_id'] callback:myCallback, //上面设置的回调方法 }) ``` #服务器端说明 服务器端可以通过request获取到传入的参数,如php的为 $_POST['shard-name'] - shard-data 传入的文件对象 - shard-name 上传的文件名,此文件名加入了随机数,防止同时上传相同文件名文件的时候冲突 - shard-total 总共碎片数 - shard-index 当前碎片编号 从1开始 - shard-token 如果设置了token则会传给服务端 - shard-merge 当传入为yes的时候,则表示上传完成,需要服务器端合并文件