Rumah  >  Artikel  >  rangka kerja php  >  Cara ThinkPHP melaksanakan fungsi muat naik dan transkod Storan Awan Qiniu

Cara ThinkPHP melaksanakan fungsi muat naik dan transkod Storan Awan Qiniu

PHPz
PHPzasal
2023-04-11 09:15:511216semak imbas

Dengan perkembangan teknologi Internet yang berterusan, storan awan semakin digunakan secara meluas, terutamanya tapak web video dan tapak web audio. Storan Awan Qiniu, sebagai penyedia perkhidmatan storan awan domestik yang terkemuka, mempunyai pelbagai aplikasi dalam industri Internet, terutamanya dalam muat naik multimedia, penyimpanan, pecutan dan pengedaran, dsb., dan mempunyai prestasi yang baik. Jadi, dalam artikel ini, kami akan menggunakan ThinkPHP sebagai contoh untuk memperkenalkan fungsi muat naik dan transkod bagi Storan Awan Qiniu.

1. Apakah itu ThinkPHP

ThinkPHP ialah rangka kerja PHP sumber terbuka yang dicipta oleh pembangun Cina Ia membolehkan pembangun membangunkan aplikasi dengan cepat melalui konfigurasi dan enkapsulasi yang mudah. ThinkPHP mempertimbangkan sepenuhnya keperluan sebenar pembangunan web dan bersungguh-sungguh menyepadukan kerja-kerja cemerlang dalam komuniti sumber terbuka untuk memenuhi sepenuhnya keperluan pembangun web.

2. Apakah itu Storan Awan Qiniu

Storan Awan Qiniu ialah penyedia perkhidmatan storan awan yang pantas dan ringkas yang menumpukan pada menyediakan storan awan yang boleh dipercayai, cekap dan selamat. Storan Awan Qiniu boleh menyediakan perkhidmatan storan, pengurusan dan pengedaran untuk fail multimedia Pengguna hanya perlu memuat naik fail multimedia mereka sendiri ke Storan Awan Qiniu, dan mereka boleh dipercepatkan melalui CDN Qiniu, membolehkan pengguna mengakses fail ini dengan lebih pantas dan lancar.

3. Cara ThinkPHP melaksanakan muat naik Qiniu Cloud Storage

Untuk menggunakan fungsi muat naik Qiniu Cloud Storage di bawah rangka kerja ThinkPHP, anda perlu memperkenalkan kelas pengesahan dan Qiniu Cloud Storage di bawah SDK projek, proses maklumat pengesahan semasa memuat naik:

require_once('Auth.php');
require_once('Config.php');
require_once('autoload.php');//引入七牛SDK

$accessKey = '可以从七牛后台获得';
$secretKey = '可以从七牛后台获得';

//鉴权对象
$auth = new Auth($accessKey, $secretKey);  

//生成上传Token
$bucket = '要上传的bucket名称';//bucket名称
$key = '要生成的文件名';//文件名称
$options['returnBody'] = '{"name": $(fname), "size": $(fsize), "hash": $(etag), "url": "http://example.com/$(key)"}';//要返回的信息
$policy = array(
    'returnBody'      =>  json_encode($options['returnBody']),//返回给客户端的信息
    'saveKey'         =>  $key,//上传的文件名
);
$upToken = $auth->uploadToken($bucket, null, 3600, $policy);//生成上传Token

Selepas itu, gunakan Javascript SDK Qiniu Cloud Storage dalam halaman untuk merealisasikan pemilihan fail dan fungsi muat naik:

<script src="http://cdn.staticfile.org/plupload/2.1.1/plupload.full.min.js"></script>
<script type="text/javascript">
    //设置上传参数
    var uploader = new plupload.Uploader({
        browse_button: 'browse', //触发选择文件对话框的按钮
        url: 'http://upload.qiniup.com/', //服务器端的上传页面地址
        flash_swf_url: 'path/of/plupload/Moxie.swf',//swf文件,用于解决跨域或不支持xhr2的浏览器上传问题
        silverlight_xap_url: 'path/of/plupload/Moxie.xap',//silverlight文件,用于解决跨域或不支持xhr2的浏览器上传问题
        chunk_size: '4mb',//分块上传的块大小
        multi_selection: false,//是否支持多选
        filters: {
            max_file_size: '10mb',//最大文件大小
            mime_types: [
              {title: "Image files", extensions: "jpg,gif,png,jpeg,webp"},
              {title: "Video files", extensions: "avi,mp4,mkv,flv,mov"},
              {title: "Audio files", extensions: "mp3,wma,ogg,wav"},
            ]//上传文件类型限制
        },
        multipart: true,//是否将文件分块上传
        multipart_params: {//通常只能上传原始二进制文件到流中,而文件的信息必须存在于HTTP请求的上下文中
            key: '文件名称',
            token: '{$uptoken}',
        }
    });

    //绑定触发上传的事件
    uploader.bind('FilesAdded', function(up, files) {
       uploader.start();//当文件被添加到上传队列后开始上传流程
    });

    //绑定上传过程的事件
    uploader.bind('UploadProgress', function(up, file) {
        var percent = file.percent;
    });

    //绑定上传成功的事件
    uploader.bind('FileUploaded', function(up, file, info) {
        var result = JSON.parse(info.response);
        console.log(result.url);//获取上传成功后的文件链接
    });

    //绑定上传失败的事件
    uploader.bind('Error', function(up, err) {
        if(err.code==-601){//文件格式不符合
           console.log('上传失败:文件格式不符合要求');
        }else if(err.code==-200){//文件太大
           console.log('上传失败:文件大小超出限制');
        }else{
           console.log(err.message);//其他失败信息
        }
    });

    //启动上传
    uploader.init();
</script>

4. Bagaimana ThinkPHP menggunakan fungsi transkoding Qiniu Cloud Storage

Untuk sesetengah tapak web video, tapak web audio, dsb., fail audio dan video yang dimuat naik oleh pengguna selalunya perlu ditranskodkan untuk menjadikannya memenuhi keperluan daripada laman web pada masa ini, Anda perlu menggunakan fungsi transkod Penyimpanan Awan Qiniu Ia boleh menukar kod audio dan video secara automatik dan menjana pautan main balik dalam pelbagai format untuk memudahkan pengguna menonton atau mendengar dalam talian. Di bawah rangka kerja ThinkPHP, menggunakan fungsi transkoding Qiniu Cloud Storage memerlukan pemasangan pakej komposer untuk memasang:

composer require qiniu/php-sdk

Selepas pemasangan selesai, transcoding audio dan video boleh dicapai melalui SDK PHP. . Transkod khusus Untuk operasi kod, sila rujuk:

require __DIR__ . '/vendor/autoload.php';
use Qiniu\Auth;
use Qiniu\Storage\BucketManager;
use Qiniu\Storage\UploadManager;

$accessKey = 'your accessKey';
$secretKey = 'your secretKey';

//鉴权对象
$auth = new Auth($accessKey, $secretKey);

//空间名称
$bucket = 'your bucket';

//文件保存键名
$key = 'your key';

//上传文件的本地路径
$filePath = 'your filepath';

//上传的转码参数
$pfop = "avthumb/mp4";

//对于使用自己私有的codec库时需要制定so路径, 在<SoSdkPath>中填入so文件路径。其他情况则没必要, 该参数可以不填。
$encoding_codec_lib_path = null;

$urlbase64 = \Qiniu\base64_urlSafeEncode($bucket . ':' . $key);

//设置回调的URL地址
$notifyUrl = 'http://yourdomain.com/callback.php';

//转码完成后回调指向的地址
$fops = $pfop. '|saveas/' . \Qiniu\base64_urlSafeEncode("$bucket:$key") . '|notifyURL/' . $notifyUrl;

//初始化BucketManager
$config = new \SDK\Qiniu\Config();
$config->zone = new \SDK\Qiniu\Zone\Zhuanqu();
$bucketManager = new BucketManager($auth, $config);

//调用fetch方法拉取网络上的一个资源,该资源用于转码,该方式不支持本地音视频文件的转码处理
$fetchResult = $bucketManager->fetch($url, $bucket, $key, $pfop);

if($fetchResult != null){
    //上传流程
    $uploadMgr = new UploadManager($config);
    list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath ,null,$encoding_codec_lib_path);
    if ($err !== null) {
        echo '上传失败:', $err->message(), "\n";
    } else {
        echo '上传成功:', $ret['key'], "\n";

        //持久化处理并等待处理结果
        $persistentOps = $fops;//音视频持久化处理的详细指令,多个指令用;隔开
        $pipeline = '';//进行转码的队列名称,不传此参数将使用默认队列
        $force = true;//强制覆盖已有的同名文件

        //调用持久化处理接口实现音视频转码等持久化操作(不支持本地音视频文件的转码处理)。
        list($ret, $err) = $bucketManager->persistentFop($bucket, $key, $persistentOps, $pipeline, $force);
        if ($err !== null) {
            var_dump($err);
        } else {
            var_dump($ret);
        }
    }
}

5. Kesimpulan

Saya berharap melalui pengenalan artikel ini, semua orang dapat memahami dengan lebih mendalam tentang muat naik dan fungsi alih kod Storan Awan Qiniu, dan gunakannya dalam rangka kerja ThinkPHP Laksanakan operasi muat naik dan transkod Storan Awan Qiniu. Untuk mempelajari secebis pengetahuan, hanya dengan latihan dan ringkasan yang berterusan anda boleh benar-benar menguasai dan menerapkannya dengan bebas.

Atas ialah kandungan terperinci Cara ThinkPHP melaksanakan fungsi muat naik dan transkod Storan Awan Qiniu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn