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!

相关文章
|
5月前
|
SQL 缓存 PHP
PHP框架详解 - symfony框架
Symfony框架凭借其灵活性、高性能和强大的社区支持,成为PHP开发领域的重要工具。无论是初学者还是资深开发者,都可以通过Symfony快速构建高质量的Web应用程序。通过深入理解Symfony的核心组件和最佳实践,开发者可以充分发挥其优势,提升开发效率和代码质量。
105 24
|
7月前
|
缓存 安全 前端开发
构建高效后端服务:从理论到实战
在数字化浪潮的推动下,后端服务成为了支撑现代互联网应用的核心。本文旨在揭示如何打造一个既可靠又高效的后端系统,从基础架构设计、代码组织、性能优化到安全防护,全方位解析后端开发的艺术。通过实际代码示例和深入浅出的解释,引导读者理解并掌握后端开发的关键技术点。
152 6
|
7月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
221 4
|
7月前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
146 4
|
7月前
|
API PHP 数据库
PHP中哪个框架最适合做API?
在数字化时代,API作为软件应用间通信的桥梁至关重要。本文探讨了PHP中适合API开发的主流框架,包括Laravel、Symfony、Lumen、Slim、Yii和Phalcon,分析了它们的特点和优势,帮助开发者选择合适的框架,提高开发效率、保证接口稳定性和安全性。
268 3
|
7月前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
67 3
|
7月前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
84 3
|
存储 分布式计算 PHP
地球上最大的PHP站点 后端技术解密
Facebook的扩展性挑战 在我们讨论细节之前,这里有一些Facebook已经做的软件规模: ◆Facebook有570000000000每月页面浏览量 (据Google Ad Planner) ◆Facebook的照片量比其他所有图片网站加起来还多(包括Flickr等网站) ◆每个月超过...
1088 0
|
2月前
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
134 17

热门文章

最新文章