Heim  >  Artikel  >  PHP-Framework  >  Wie ThinkPHP die Upload- und Transkodierungsfunktionen von Qiniu Cloud Storage implementiert

Wie ThinkPHP die Upload- und Transkodierungsfunktionen von Qiniu Cloud Storage implementiert

PHPz
PHPzOriginal
2023-04-11 09:15:511262Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Internet-Technologie wird Cloud-Speicher immer häufiger genutzt, insbesondere von Video-Websites und Audio-Websites. Diese Websites bieten Benutzern Online-Anzeigen oder Online-Hören, und dahinter steht die Cloud-Speicher-Technologie. Qiniu Cloud Storage verfügt als führender inländischer Cloud-Speicherdienstleister über ein breites Anwendungsspektrum in der Internetbranche, insbesondere beim Hochladen, Speichern, Beschleunigen und Verteilen von Multimedia usw., und weist eine gute Leistung auf. Daher werden wir in diesem Artikel ThinkPHP als Beispiel verwenden, um die Upload- und Transkodierungsfunktionen von Qiniu Cloud Storage vorzustellen.

1. Was ist ThinkPHP? ThinkPHP ist ein kostenloses und quelloffenes PHP-Framework, das von chinesischen Entwicklern erstellt wurde. Es ermöglicht Entwicklern die schnelle Entwicklung von Anwendungen durch einfache Konfiguration und Paketierung. ThinkPHP berücksichtigt vollständig die tatsächlichen Anforderungen der Webentwicklung und integriert energisch hervorragende Arbeiten in der Open-Source-Community, um die Anforderungen von Webentwicklern vollständig zu erfüllen.

2. Was ist Qiniu Cloud Storage? Qiniu Cloud Storage ist ein schneller und einfacher Cloud-Speicherdienstleister, der sich darauf konzentriert, Benutzern zuverlässige, effiziente und sichere Cloud-Speicherdienste bereitzustellen. Qiniu Cloud Storage kann Speicher-, Verwaltungs- und Verteilungsdienste für Multimediadateien bereitstellen. Benutzer müssen lediglich ihre eigenen Multimediadateien auf Qiniu Cloud Storage hochladen. Diese können über das CDN von Qiniu beschleunigt werden, sodass Benutzer schneller und reibungsloser auf diese Dateien zugreifen können.

3. Wie ThinkPHP den Upload von Qiniu Cloud Storage implementiert

Um die Upload-Funktion von Qiniu Cloud Storage unter dem ThinkPHP-Framework zu nutzen, müssen Sie zunächst die Authentifizierungsklasse und das Qiniu Cloud Storage SDK unter dem Projekt einführen, um die Authentifizierungsinformationen zu verarbeiten während des Hochladens:

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

Danach verwenden Sie das Javascript SDK von Qiniu Cloud Storage auf der Seite, um Dateiauswahl- und Upload-Funktionen zu realisieren:

<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. Wie ThinkPHP die Transkodierungsfunktion von Qiniu Cloud Storage nutzt

Für einige Video-Websites und Audio-Websites usw. müssen die von Benutzern hochgeladenen Audio- und Videodateien häufig transkodiert werden, damit sie den Anforderungen der Website entsprechen. Zu diesem Zeitpunkt müssen Sie die Transkodierungsfunktion von Qiniu Cloud Storage verwenden, die die Audio- und Videodateien automatisch transkodieren kann und das Generieren von Wiedergabelinks in verschiedenen Formaten erleichtern Benutzern das Ansehen oder Anhören online. Unter dem ThinkPHP-Framework erfordert die Verwendung der Transkodierungsfunktion von Qiniu Cloud Storage die Installation des Composer-Pakets. Verwenden Sie Composer zur Installation:

composer require qiniu/php-sdk

Nach Abschluss der Installation kann die Audio- und Videotranskodierung über das PHP SDK durchgeführt werden. Bitte beziehen Sie sich auf:

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. Fazit

Ich hoffe, dass durch die Einführung dieses Artikels jeder ein tieferes Verständnis der Upload- und Transkodierungsfunktionen von Qiniu Cloud Storage erlangen und die Upload- und Transkodierungsvorgänge von Qiniu Cloud Storage realisieren kann unter dem ThinkPHP-Framework. Um ein Wissen zu erlernen, können Sie es nur durch kontinuierliches Üben und Zusammenfassen wirklich beherrschen und frei anwenden.

Das obige ist der detaillierte Inhalt vonWie ThinkPHP die Upload- und Transkodierungsfunktionen von Qiniu Cloud Storage implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn