-
基于php大文件分片上传至七牛云,支持断点续传,,带进度条
基于php大文件分片上传至七牛云,使用的是七牛云js-sdk V2版本,引入js文件,配置简单,可以暂停,暂停后支持断点续传(刷新、关闭页面、重新上传、网络中断等情况),可以配置分片大小和分片数量,官方文档https://developer.qiniu.com/kodo/6889/javascript-sdk-historical-document-2-x。token需要从后端获取。如果不使用七牛云可参看基于php+webuploader的大文件分片上传,带进度条
前端
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>分片上传七牛云</title> </head> <body> <form method="post" enctype="multipart/form-data"> <br/> <!-- 选择文件按钮 --> <input id="input-file" class="upload" type="file" value="" onchange="upFile(this)"> <br/><br/> <!-- 进度条 --> <div id="totalBar" style="float:left;width:20%;height:20px;border:1px solid;border-radius:3px"> <div id="totalBarColor" style="width:0%;border:0;background:#00b7ee; color: #FFF;height:20px;"></div> <span class="speed"></span> </div> <br/> <BR/> 文件名:<input type="text" name="key"> <br/> <BR/> <input type="button" value="上传" onclick="upload()"/> <input type="button" value="暂停" onclick="filepause()"/> </form> <!-- 引入js --> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://unpkg.com/qiniu-js@2.5.4/dist/qiniu.min.js"></script> <script> var subObject; var file; //定义上传配置 大于 4M 时可分块上传,小于 4M 时直传 var config = { useCdnDomain: true, //是否使用 cdn 加速域名 region: qiniu.region.z1, //上传域名区域 华东空间z0,华南z2,华北z1 retryCount: 6, //上传自动重试次数 默认3次 }; //定义putExtra上传限制 var putExtra = { fname: "", //文件原始文件名 params: { 'x:flag': 'qiniu'}, //自定义变量 // mimeType: ["mp4"] //指定所传的文件类型 }; var compareChunks = []; var observable; var subscription; function upFile(node) { var fileURL = ""; try{ file = null; if(node.files && node.files[0] ){ file = node.files[0]; }else if(node.files && node.files.item(0)) { file = node.files.item(0); } }catch(e){ } creatFile(fileURL,file.name); return fileURL; } // 文件名 function creatFile(fileURL,fileName){ $("input[name=key]").val(fileName); $("#totalBarColor").css("width","0%"); } // 上传操作 function upload() { // 设置next,error,complete对应的操作,分别处理相应的进度信息,错误信息,以及完成后的操作 subObject = { next: next, error: error, complete: complete }; token = "**************"; //需要从后端获取 //上传 observable = qiniu.upload(file, file.name, token, putExtra, config); // 调用sdk上传接口获得相应的observable,控制上传和暂停 subscription = observable.subscribe(subObject); } // 暂停操作 function filepause(){ subscription.unsubscribe(); } //分片上传返回response,标记上传进度 var next = function(response) { var chunks = response.chunks||[]; var total = response.total; $(".speed").text("进度:" + Math.floor(total.percent) + "% "); //进度向下取整 $("#totalBarColor").css("width", total.percent + "%"); compareChunks = chunks; }; // 错误信息 var error = function(err) { alert(err.message); }; // 上传完成 var complete = function(res) { // 返回文件信息 console.log(res); console.log(res.key); }; </script> </body> </html>
后端:获取token
use Qiniu\Auth as Auth;
use Qiniu\Storage\BucketManager;
use Qiniu\Storage\UploadManager;
function getToken() { vendor('qiniu.autoload'); $accessKey = '***'; $secretKey = '***'; $bucket = '***'; $expires = 7200; // 构建鉴权对象 $auth = new Auth($accessKey, $secretKey); $token = $auth->uploadToken($bucket,null,$expires, null, true); return $token; }
出处:https://www.cnblogs.com/zxf100/p/17089739.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式