layui框架实战案例(5):基于PHP后端的layUI上传视频到七牛云对象储存并自动转码

简介: layui框架实战案例(5):基于PHP后端的layUI上传视频到七牛云对象储存并自动转码

七牛云配置

先在七牛云申请账户及accessKey信息,保存为数组文件,方便后期调用

  // +----------------------------------------------------------------------
  // | 七牛云设置
  // +----------------------------------------------------------------------
  //七牛云appid
  'qn_accessKey' => 'idaqr1_NoVpXmz...',
  //七牛云appSecret
  'qn_secretKey' => 'y6J4dIkqHC...',
  //七牛储存外链地址;
  'qn_url' => 'http://heart.***.net/',
  //七牛存储空间列表;
  'qn_bucket' => 'heart',
  //七牛私有队列;
  'qn_pipeline' => 'chalu',


引入七牛云依赖包

开发文档及下载地址参见:https://developer.qiniu.com/kodo/sdk/1241/php


前端上传按钮



HTML代码:

        <div class="weui-form__title" style="margin: 10px auto;text-align: center;">
            <button class="layui-btn" id="test3"><i class="layui-icon"></i>上传图片</button>
            <button class="layui-btn" id="test5" style="margin: auto 10px;"><i class="layui-icon"></i>上传视频</button>
        </div>

js代码

        //上传视频至七牛云;
        upload.render({
            elem: '#test5'
            , url: 'safe.php?m=Safe&a=safeUpVideo&act=upVideo&safe_id=' + safe_id
            , accept: 'video' //视频
            , exts: 'mp4|mpg|mov' //只允许上传压缩文件
            , before: function () {
                layer.load();
            }
            , done: function (res) {
                if (res.status != "0") {
                    return layer.msg('上传失败!');
                }
                //上传成功
                if (res.status == "0") {
                    layer.alert(res.err, {icon: 6}, function () {
                        // 获得frame索引
                        var index = parent.layer.getFrameIndex(window.name);
                        //关闭当前frame
                        parent.layer.close(index);
                        //重新加载页面
                        window.parent.location.reload();
                    });
                }
            }
        });
    });

后端处理

封装上传类

<?php
//引入入口文件,并写好相应要使用的模块命名空间
if (!defined('QINIU_ROOT')) {
    define('QINIU_ROOT', dirname(__FILE__) . '/');
    require(QINIU_ROOT . 'qiniu/autoload.php');
}
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
use Qiniu\Storage\BucketManager;
class QINIU
{
    public function upchange($conf_accessKey, $conf_secretKey, $conf_bucket, $conf_pipeline, $filePath, $mediaid)
    {
        //初始化好Auth 类,用于签名的公钥和私钥
        $accessKey = $conf_accessKey;
        $secretKey = $conf_secretKey;
        $auth = new Auth($accessKey, $secretKey);
        $bucket = $conf_bucket;
        //数据处理队列名称,不设置代表不使用私有队列,使用公有队列。
        $pipeline = $conf_pipeline;
        //通过添加'|saveas'参数,指定处理后的文件保存的bucket和key
        //不指定默认保存在当前空间,bucket为目标空间,后一个参数为转码之后文件名
        $savekey = Qiniu\base64_urlSafeEncode($bucket . ':' . $mediaid . '.mp4');
        //设置转码参数
        $fops = "avthumb/mp4/ab/128k/ar/44100/acodec/libfaac/r/30/vb/720k/vcodec/libx264/s/640x360/autoscale/1/stripmeta/0";
        $fops = $fops . '|saveas/' . $savekey;
        if (!empty($pipeline)) {  //使用私有队列
            $policy = array(
                'persistentOps' => $fops,
                'persistentPipeline' => $pipeline
            );
        } else {                  //使用公有队列
            $policy = array(
                'persistentOps' => $fops
            );
        }
        //指定上传转码命令;
        $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);
        $key = $mediaid . '.mp4'; //七牛云中保存的文件名
        $uploadMgr = new UploadManager();
        //上传文件并转码$filePath为本地文件路径;
        list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);
        if ($err !== null) {
            return false;
        } else {
            return $ret['key'];
        }
    }
}

调用上传类

    //上传视频 by poleng 2020-09-05
    case "upVideo";
        $safe_id = get_param("safe_id");
        $file = $_FILES['file'];
        //处理文件后缀名;
        $ext = explode('.', $_FILES['file']['name']);
        $ext = end($ext);//mp4
        //上传至七牛云并转码;
        require 'libs/QiNiu.php';
        $qiniu = new QINIU;
        //文件随机命名;
        $mediaId = md5(time());
        $fileName = $file['tmp_name'];
        //执行上传操作;
        $qiniu->upchange($CONF['qn_accessKey'], $CONF['qn_secretKey'], $CONF['qn_bucket'], $CONF['qn_pipeline'], $fileName, $mediaId);
        //获取上传七牛云的文件名;
        $videoUrl = $CONF['qn_url'] . $mediaId . "." . $ext;
        //视频入库;
        $up_preview = "upload/video.jpg";
        $up_tpye = "1";
        $up_time = time();
        $db->insert('upfiles', array('safe_id' => $safe_id, 'up_url' => $videoUrl, 'up_preview' => $up_preview, 'up_tpye' => $up_tpye, 'up_time' => $up_time));
        //返回JSON;
        $res['status'] = "0";
        $res['videoUrl'] = $videoUrl;
        $res['err'] = '上传成功!';
        die(json_encode_lockdata($res));
        break;


Done!

相关文章
|
7月前
|
缓存 大数据 PHP
PHP性能优化实战:告别缓慢脚本
PHP性能优化实战:告别缓慢脚本
264 89
|
7月前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
224 87
|
7月前
|
SQL 缓存 大数据
PHP性能优化实战:4个立竿见影的技巧
PHP性能优化实战:4个立竿见影的技巧
250 88
|
7月前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
245 88
|
8月前
|
API PHP
PHP 8新特性:Match表达式与联合类型实战指南
PHP 8新特性:Match表达式与联合类型实战指南
|
7月前
|
安全 大数据 PHP
PHP 7+ 新特性实战指南:提升开发效率
PHP 7+ 新特性实战指南:提升开发效率
233 87
|
5月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
11月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
585 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
9月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
521 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
移动开发 小程序 Linux
PHP仿WX即时聊天源码,支持视频语音聊天
PHP仿WX即时聊天源码,支持视频语音聊天
507 65

热门文章

最新文章