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!

相关文章
|
4月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
285 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
6月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
292 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
8月前
|
存储 缓存 安全
网安入门之PHP后端基础
PHP 是一种服务器端脚本语言,广泛用于动态网站和Web应用程序开发。其文件扩展名为`.php`,支持嵌入HTML、CSS和JavaScript。PHP代码由Web服务器解析后返回给浏览器。PHP是弱类型语言,变量以`$`开头,支持字符串、整数、浮点数、布尔值、数组、对象等类型。PHP具有跨平台、开源、丰富的扩展库等特点。常用超全局变量如`$_GET`、`$_POST`、`$_SESSION`等处理用户输入和会话数据。HTTP请求方法GET和POST在数据传输方式、长度限制、安全性等方面有显著差异。
网安入门之PHP后端基础
|
10月前
|
缓存 安全 前端开发
构建高效后端服务:从理论到实战
在数字化浪潮的推动下,后端服务成为了支撑现代互联网应用的核心。本文旨在揭示如何打造一个既可靠又高效的后端系统,从基础架构设计、代码组织、性能优化到安全防护,全方位解析后端开发的艺术。通过实际代码示例和深入浅出的解释,引导读者理解并掌握后端开发的关键技术点。
192 6
|
10月前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
188 4
|
10月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
389 4
|
10月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
268 3
|
10月前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
317 1
|
10月前
|
JSON Dart 数据格式
<大厂实战场景> ~ flutter&鸿蒙next处理后端返回来的数据的转义问题
在 Flutter 应用开发中,处理后端返回的数据是常见任务,尤其涉及转义字符时。本文详细探讨了如何使用 Dart 的 `dart:convert` 库解析包含转义字符的 JSON 数据,并提供了示例代码和常见问题的解决方案,帮助开发者有效处理数据转义问题。
385 0