ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP が Qiniu Cloud Storage のアップロードおよびトランスコーディング機能を実装する方法

ThinkPHP が Qiniu Cloud Storage のアップロードおよびトランスコーディング機能を実装する方法

PHPz
PHPzオリジナル
2023-04-11 09:15:511216ブラウズ

インターネット技術の継続的な発展に伴い、クラウド ストレージのアプリケーション、特にビデオ Web サイトやオーディオ Web サイトがますます普及しており、これらの Web サイトはユーザーにオンライン視聴やオンラインリスニングを提供しますが、その背後にあるのがクラウド ストレージです。 。 Qiniu Cloud Storage は、国内の大手クラウド ストレージ サービス プロバイダーとして、インターネット業界、特にマルチメディアのアップロード、ストレージ、高速化、配信などに幅広い用途を持ち、優れたパフォーマンスを持っています。そこでこの記事では、ThinkPHP を例に、Qiniu Cloud Storage のアップロード機能とトランスコーディング機能を紹介します。

1. ThinkPHP とは

ThinkPHP は、中国の開発者によって作成された無料のオープンソース PHP フレームワークで、開発者は簡単な構成とカプセル化を通じてアプリケーションを迅速に開発できます。 ThinkPHP は、Web 開発の実際のニーズを十分に考慮し、オープンソース コミュニティの優れた作品を精力的に統合して、Web 開発者のニーズを完全に満たします。

2. Qiniu Cloud Storage とは

Qiniu Cloud Storage は、信頼性が高く、効率的で安全なクラウド ストレージをユーザーに提供することに重点を置いた、高速かつシンプルなクラウド ストレージ サービス プロバイダーです。 Qiniu Cloud Storage は、マルチメディア ファイルのストレージ、管理、配信サービスを提供できます。ユーザーは自分のマルチメディア ファイルを Qiniu Cloud Storage にアップロードするだけでよく、Qiniu の CDN を通じて高速化できるため、ユーザーはこれらのファイルにより速く、よりスムーズにアクセスできます。

3. ThinkPHP が Qiniu Cloud Storage のアップロードを実装する方法

ThinkPHP フレームワークで Qiniu Cloud Storage のアップロード機能を使用するには、まず認証クラスと Qiniu Cloud Storage を導入する必要があります。プロジェクト SDK を使用して、アップロード時に認証情報を処理します:

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

その後、ページ内で Qiniu Cloud Storage の Javascript SDK を使用して、ファイルの選択とアップロード機能を実現します:

<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. Niuyun Storage の ThinkPHP 7 トランスコーディング機能の使用方法

ビデオ Web サイトやオーディオ Web サイトなどでは、Web サイトの要件を満たすために、ユーザーがアップロードしたオーディオ ファイルやビデオ ファイルをトランスコードする必要があることがよくあります。現時点では、7 つの Niu Cloud Storage を使用する必要があります。Niu Cloud Storage にはトランスコーディング機能があり、オーディオとビデオを自動的にトランスコーディングし、さまざまな形式の再生リンクを生成して、ユーザーがオンラインで視聴しやすくします。 ThinkPHP フレームワークでは、Qiniu Cloud Storage のトランスコーディング機能を使用するには、composer パッケージをインストールする必要があります。コンポーザーを使用してインストールします:

composer require qiniu/php-sdk

インストールが完了すると、PHP SDK を通じてオーディオとビデオのトランスコーディングを実現できます。トランスコーディング操作 参照先:

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. 結論

この記事の紹介を通じて、皆さんが Qiniu Cloud Storage のアップロードおよびトランスコーディング機能をより深く理解できることを願っています。 ThinkPHP フレームワークの下で Qiniu を実装し、クラウド ストレージのアップロードとトランスコーディングの操作を実行します。知識を学ぶには、継続的な練習と要約によってのみ、それを真に習得し、自由に適用することができます。

以上がThinkPHP が Qiniu Cloud Storage のアップロードおよびトランスコーディング機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。