博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PLUPLOAD插件 ━━ 上传总结(分片上传,php后端处理)
阅读量:4116 次
发布时间:2019-05-25

本文共 4418 字,大约阅读时间需要 14 分钟。

长时间没用plupload了,发现现在版本已经到plupload3了。

网上找了篇好文回顾一下,以下代码js和html部分亲测有效,php代码部分使用自己原来系统的,文章中的尚未测试。

plupload插件官方地址:

参数,方法,设置说明文档地址: 、

前端

使用方法:

界面:

添加前端显示的为上传按钮

在这里插入图片描述

添加文件之后的plupload对象

在这里插入图片描述
在这里插入图片描述
开始上传,可以选择添加之后立即上传(FilesAdded事件),也可以手动触发,方法为start();

//上传图片uploader_img.setOption("multipart_params", {
'caseName': caseName});//设置上传附带的参数uploader_img.start();

上传的xhr

在这里插入图片描述

在这里插入图片描述

PHP后台处理

上传类:

file_path=$filePath; $this->blob_num=$blobNum; $this->total_num=$totalNum; $this->file_name=$fileName; $this->temp_name=$tempName; $this->temp_path=ROOT_PATH.'public/upload/'; $this->moveFile(); $this->mergeFile(); } //移动临时文件 private function moveFile(){
$this->touchDir(); //将php上传的临时文件移动到临时目录 $filename=$this->temp_path.$this->file_name.'_'.$this->blob_num; move_uploaded_file($this->temp_name,$filename); } //合并文件 private function mergeFile(){
//当前分片序号(从0开始)等于总分片数-1 if($this->blob_num==($this->total_num-1)){
$blob=''; //使用fopen //使用file_get(put)_contents //先判断文件是否已经存在 if(file_exists($this->file_path.iconv('UTF-8','GB2312',$this->file_name))){
@unlink($this->file_path.iconv('UTF-8','GB2312',$this->file_name)); } for($i=0;$i<$this->total_num;$i++){
$blob=file_get_contents($this->temp_path.$this->file_name.'_'.$i); $last_path=$this->file_path.$this->file_name; iconv('UTF-8','GB2312',$this->file_path.$this->file_name); file_put_contents($last_path,$blob,FILE_APPEND); } $this->deleteTempFile(); } } //删除上传的临时文件 private function deleteTempFile(){
for($i=0;$i<$this->total_num;$i++){
@unlink($this->temp_path.$this->file_name.'_'.$i); } } //创建文件架 private function touchDir(){
//上传目录 if(!file_exists($this->file_path)){
$oldmask=umask(0); @mkdir($this->file_path,0777,true); umask($oldmask); } //临时文件上传目录 if(!file_exists($this->temp_path)){
@mkdir($this->temp_path,0777,true); } return; } //API返回数据GB public function apiReturn(){
if($this->blob_num==($this->total_num-1)){
//修改文件权限 $oldmask=umask(0); $res=chmod($this->file_path.$this->file_name,0777); umask($oldmask); $res1=$this->file_path.$this->file_name; $res2=file_exists($res1); if($res2){
$data['code']=2; $data['msg']='success'; $data['file_path']=$this->file_path.$this->file_name; } }else{
if(file_exists($this->temp_path.$this->file_name.'_'.$this->blob_num)){
$data['code']=1; $data['msg']='waiting for all'; $data['file_path']=''; } } return $data; } }

调用上传类

public function uploadImg(){
if ($_FILES['file']['error'] == 0) {
$caseName = trim($this->request->param('caseName'));//获取参数 $file_path = ROOT_PATH . '/img/';//设置文件路径 $blob_num = $this->request->param('chunk');//当前片数 $total_num = $this->request->param('chunks');//总片数 $file_name = $this->request->param('name');//文件名称 $temp_name = $_FILES['file']['tmp_name'];//零时文件名称 $uploadClass = new Upload($file_path, $blob_num, $total_num, $file_name, $temp_name);//实例化upload类,并传入相关参数 $data = $uploadClass->apiReturn(); return json_encode($data); } else {
$data['code'] = 0; $data['msg'] = 'error code:' . $_FILES['file']['error']; $data['file_path'] = ''; return json_encode($data); }}

上传成功后返回的信息:

在这里插入图片描述

上传成功之后,plupload对象会调用FileUploaded事件

FileUploaded: function (up, file, res) {
//文件上传完成后,up:plupload对象,file:上传的文件相关信息,res:服务器返回的信息 //进行相关处理}

上传过程中会调用UploadProgress事件

UploadProgress: function (up, file) {
//上传过程中调用的方法 $('#img-progress').show(); var percent = file.percent; element.progress('img', percent + '%');}

该方法可以用来控制进度条。

若有不足之处,敬请见谅!

==================================

参考

《》

《》
《》
《》

文中提到的$('.draggable-element').arrangeable();,使用了如下的插件

《》
《》

转载地址:http://yakpi.baihongyu.com/

你可能感兴趣的文章
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
DirectX11 光照演示示例Demo
查看>>
VUe+webpack构建单页router应用(一)
查看>>
Node.js-模块和包
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
PHP 7 的五大新特性
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
OpenCV meanshift目标跟踪总结
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
听说玩这些游戏能提升编程能力?
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
Mysql复制表以及复制数据库
查看>>
Kafka
查看>>
9.1 为我们的角色划分权限
查看>>