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!

相关文章
|
25天前
|
缓存 安全 PHP
PHP中的魔术方法与对象序列化
本文将深入探讨PHP中的魔术方法,特别是与对象序列化和反序列化相关的__sleep()和__wakeup()方法。通过实例解析,帮助读者理解如何在实际应用中有效利用这些魔术方法,提高开发效率和代码质量。
|
2月前
|
存储 关系型数据库 MySQL
深入浅出PHP:从基础到实战
【9月更文挑战第20天】本文将带你走进PHP的世界,从最基础的语法开始,逐步深入到实战应用。我们将通过实例讲解PHP的核心概念,如变量、控制结构、函数等,然后介绍如何使用PHP进行数据库操作和文件处理。最后,我们将展示如何用PHP构建一个简单的博客系统,让你在实践中掌握PHP的应用。无论你是编程新手,还是有一定经验的开发者,都能在这篇文章中找到有价值的信息。让我们一起探索PHP的魅力吧!
|
3天前
|
存储 Java PHP
PHP编程之旅:从基础到实战
【10月更文挑战第23天】本文将带你走进PHP的世界,探索这个流行的服务器端脚本语言的魅力。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和实用的代码示例。我们将从PHP的基本概念开始,然后深入到实际应用中,最后通过一个实战项目来巩固所学知识。让我们一起开启这段激动人心的PHP编程之旅吧!
5 0
|
2月前
|
设计模式 数据管理 测试技术
PHP中的设计模式:单一职责原则在实战项目中的应用
在软件开发中,设计模式是解决问题的最佳实践。本文通过分析单一职责原则(SRP),探讨了如何运用这一原则来提升PHP项目的可维护性和扩展性。我们将从实际案例出发,展示单一职责原则在业务逻辑分离、代码解耦和提高测试效率方面的应用。无论是新手还是经验丰富的开发者,都能从中获益,进而编写出更健壮、更灵活的PHP代码。
36 5
|
2月前
|
设计模式 安全 PHP
PHP中的设计模式:单一职责原则在实战中的应用
在软件开发中,设计模式是解决常见问题的成熟方案。本文将通过分析单一职责原则这一设计原则,探讨如何在PHP应用程序中应用这一原则来提高代码的可维护性、扩展性和灵活性。我们将从实际案例出发,展示单一职责原则的具体应用方法,并解释其对项目开发周期和质量的积极影响。无论你是PHP初学者还是经验丰富的开发者,都能从中获益,提升你的编程实践水平。
29 4
|
2月前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
2月前
|
前端开发 PHP 数据库
PHP编程入门:从基础到实战
【9月更文挑战第23天】本文将引导你进入PHP编程的世界,从基础知识到实际项目应用,逐步深入。我们将一起探索PHP的基本语法、常用函数和框架使用,以及如何在实际项目中运用PHP进行开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上PHP编程的学习之旅吧!
|
2月前
|
PHP
PHP中如何比较两个对象
PHP中如何比较两个对象
|
2月前
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
38 9
|
2月前
|
存储 前端开发 PHP
PHP编程之旅:从入门到实战
本文将带你走进PHP的世界,从基础语法到实际开发应用,逐步深入探索PHP的魅力。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到有价值的信息。我们将一起探讨PHP的基本概念、常用功能、以及如何在实际项目中运用PHP进行高效开发。准备好了吗?让我们开始这场PHP编程之旅吧!