速建时代TPCMS管理系统
首页
系统介绍
安装教程
开发
发文帮助
制作帮助
APP接口使用
商城api管理
新版
系统介绍
功能信息
架构信息
安装教程
模板安装
运行环境安装
开发环境的搭建3
开发
微信开发
thinkphp6 auth 权限
buildHtml
数据结构
tp5插件管理
发文帮助
招聘管理
栏目管理
网站管理
内容管理
制作帮助
设计说明
首页制作帮助-index
列表页制作-list_article
封面(单页)频道栏目-index_article
内容页制作-article_article
单页自定义-名称自定义
网站制作模板帮助
更新
APP接口使用
api获取导航
商城api管理
个人中心
商城列表
api商品通用接口
新版
oss视频分片上传
```php //$accessKeyId,$accessKeySecret这两个值都是可以在阿里云的账号中获取到的 //$endpoint是oss仓库中的 Endpoint地域节点中的外网访问的那个,也可以是传输加速域名的那个 //$bucket 是oss的仓库名称 //$object是指在上传到阿里云oss后文件的路径(其中包含了路径+文件名称) //$filePath是指在前端上传文件到后端后,有一个临时存放的位置,一般的键名是tmp_name public function ossvideo(){ $name = input('name'); $file = request()->file('imgfile'); $arrList1 = $_FILES['imgfile']['name']; $arrList2 = $_FILES['imgfile']['tmp_name']; $object=$name.date('Y-m-d', time()) . '/'.$arrList1; $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint, true); try { $uploadId = $ossClient->initiateMultipartUpload($this->bucket, $object); } catch (OssException $e) { return $e->getMessage(); } /* * step 2. Upload parts */ $partSize = 10 * 1024 * 1024; $uploadFile = $arrList2; $uploadFileSize = filesize($uploadFile); $pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize); $responseUploadPart = array(); $uploadPosition = 0; $isCheckMd5 = true; foreach ($pieces as $i => $piece) { $fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO]; $toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1; $upOptions = array( $ossClient::OSS_FILE_UPLOAD => $uploadFile, $ossClient::OSS_PART_NUM => ($i + 1), $ossClient::OSS_SEEK_TO => $fromPos, $ossClient::OSS_LENGTH => $toPos - $fromPos + 1, $ossClient::OSS_CHECK_MD5 => $isCheckMd5, ); if ($isCheckMd5) { $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos); $upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5; } //2. Upload each part to OSS try { $responseUploadPart[] = $ossClient->uploadPart($this->bucket, $object, $uploadId, $upOptions); } catch (OssException $e) { return $e->getMessage(); } } $uploadParts = array(); foreach ($responseUploadPart as $i => $eTag) { $uploadParts[] = array( 'PartNumber' => ($i + 1), 'ETag' => $eTag, ); } /** * step 3. Complete the upload */ try { $info=$ossClient->completeMultipartUpload($this->bucket, $object, $uploadId, $uploadParts); $data=[ 'name'=>$name.date('Y-m-d', time()) . '/'.$arrList1, 'size'=>$info['info']['speed_upload'], 'tiem'=>$info['date'] ]; db('ossarchives')->insert($data); return json(['code'=>1,"msg"=>'上传完成']); } catch (OssException $e) { return $e->getMessage(); } } ``` html ```html
选择多文件
选择上传目录:
选择上传目录
{volist name="oss" id="vo"}
{$vo.name}
{/volist}
文件名
大小
状态
进度
操作
开始上传
``` js ```` ```` layui.use(['upload','element','layer','form'], function(){ var $ = layui.jquery, element = layui.element ,upload = layui.upload; var layer = layui.layer; var form = layui.form; var xhrOnProgress = function(fun) { xhrOnProgress.onprogress = fun; //绑定监听 //使用闭包实现监听绑 return function() { //通过$.ajaxSettings.xhr();获得XMLHttpRequest对象 var xhr = $.ajaxSettings.xhr(); //判断监听函数是否为函数 if (typeof xhrOnProgress.onprogress !== 'function') return xhr; //如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去 if (xhrOnProgress.onprogress && xhr.upload) { xhr.upload.onprogress = xhrOnProgress.onprogress; } return xhr; } } //文章移动 form.on('select(cateid)', function () { var cateid=$("select[name='cateid'] option:selected").val(); $("input[name='cate']").val(cateid); }); var i=0; //多文件列表示例 var demoListView = $('#demoList') ,uploadListIns = upload.render({ elem: '#testList' ,url: "{:url('Oss/ossvideo')}" ,accept: 'images' //允许上传的文件类型 ,field:'imgfile' ,multiple: true ,exts: 'flv|MP4|swf' //只允许上传压缩文件 ,auto: false ,data: { name:function(){ return $('#cate').val() } } ,bindAction: '#testListAction' , xhr: xhrOnProgress , progress: function (value,e,a) { $("#demoList").find('.layui-progress').each(function () { var progressBarName = $(this).attr("lay-filter"); if ($('.layui-progress').attr("file") == a.name) { element.progress(progressBarName, value + '%') } }) }, before : function(obj) { //开始上传时候让进度条去除隐藏状态 $("#upload_progress").removeClass("layui-hide"); //或者设置loading //layer.load(1); //去除方法为 layer.close('loading'); 或者 layer.closeAll('loading'); } ,choose: function(obj){ var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 //读取本地文件 obj.preview(function(index, file, result){ var tr = $(['
' ,'
'+ file.name +'
' ,'
'+ (file.size/1024).toFixed(1) +'kb
' ,'
等待上传
' ,'
' ,'
' ,'
重传
' ,'
删除
' ,'
' ,'
'].join('')); //单个重传 tr.find('.demo-reload').on('click', function(){ obj.upload(index, file); }); //删除 tr.find('.demo-delete').on('click', function(){ delete files[index]; //删除对应的文件 tr.remove(); uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选 }); demoListView.append(tr); }); } ,done: function(res, index, upload){ if(res.code==1){ var tr = demoListView.find('tr#upload-'+ index) ,tds = tr.children(); tds.eq(2).html('
上传成功
'); tds.eq(4).html(''); return delete this.files[index]; } this.error(index, upload); } ,error: function(index, upload){ var tr = demoListView.find('tr#upload-'+ index) ,tds = tr.children(); tds.eq(2).html('
上传失败
'); tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传 } }); }); ```