>  기사  >  백엔드 개발  >  PHP 애플리케이션 Qiniu Cloud에 대한 리디렉션 업로드 및 콜백 업로드 공유 예

PHP 애플리케이션 Qiniu Cloud에 대한 리디렉션 업로드 및 콜백 업로드 공유 예

*文
*文원래의
2017-12-22 13:17:573358검색

실제 프로젝트에서는 서버 용량과 대역폭이 제한되어 리소스를 업로드하려면 타사 개체 스토리지 서비스를 사용해야 하는 경우가 많습니다. 중국의 주요 서비스 제공업체로는 Qiniu Cloud, Alibaba 등이 있습니다. 이 기사에서는 Qiniu Cloud를 예로 들어 Qiniu Cloud와 같은 서비스 제공업체의 공간에 사용자의 비디오를 업로드하는 방법을 설명합니다.

Qiniu Cloud 업로드에는 두 가지 주요 유형이 있습니다.

서버 측 업로드

프런트 엔드 업로드이며, 프런트 엔드는 두 가지 반환 방법으로 나뉩니다:

1) Ajax를 해결할 수 있는 리디렉션 반환. 크로스 도메인 문제

2) 콜백이 반환되면 Qiniu Cloud는 먼저 서버에 데이터를 반환한 다음 Qiniu Cloud가 프런트 엔드로 반환되어 미니 프로그램 업로드와 같은 리디렉션을 지원하지 않는 요청 방식을 해결합니다


이번에는 Qiniu Cloud PHP SDK를 사용했습니다.

composer require qiniu/php-sdk

이번에는 kindeditor 편집기를 사용했습니다.

Kindeditor/php 아래에 config.php를 추가하여 주로 매개변수 구성

<?php
error_reporting(0);
 
defined(&#39;ROOT_PATH&#39;) || define(&#39;ROOT_PATH&#39;, dirname(__DIR__).&#39;/&#39;);
defined(&#39;QINIU_ACCESS_KEY&#39;) || define(&#39;QINIU_ACCESS_KEY&#39;, &#39;&#39;);
defined(&#39;QINIU_SECRET_KEY&#39;) || define(&#39;QINIU_SECRET_KEY&#39;, &#39;&#39;);
defined(&#39;QINIU_TEST_BUCKET&#39;) || define(&#39;QINIU_TEST_BUCKET&#39;, &#39;七牛云空间名&#39;);
defined(&#39;QINIU_BUCKET_DOMAIN&#39;) || define(&#39;QINIU_BUCKET_DOMAIN&#39;, &#39;七牛云空间网址&#39;);
 
defined(&#39;CALLBACK_URL&#39;) || define(&#39;CALLBACK_URL&#39;, &#39;域名/kindeditor/php/callBack.php&#39;);
defined(&#39;RETURN_URL&#39;) || define(&#39;RETURN_URL&#39;, &#39;域名/kindeditor/php/returnBack.php&#39;);
 
require_once ROOT_PATH."vendor/autoload.php";

 

Kiniu_token.php를 Kindeditor/php 아래에 추가하여 업로드용 토큰을 생성하세요

<?php
use Qiniu\Auth;
 
require_once __DIR__."/config.php";
 
// 构建鉴权对象
$auth = new Auth(QINIU_ACCESS_KEY, QINIU_SECRET_KEY);
 
$data = [
    &#39;returnUrl&#39; => RETURN_URL,
];
if (isset($_REQUEST[&#39;is_call&#39;])) {
   $data = [
      &#39;callbackUrl&#39; => CALLBACK_URL,
      &#39;callbackBody&#39; => &#39;key=$(key)&hash=$(etag)&w=$(imageInfo.width)&h=$(imageInfo.height)&#39;
   ];
}
// 生成上传 Token
$token = $auth->uploadToken(QINIU_TEST_BUCKET, null, 3600, $data);
 
echo json_encode([
   &#39;error&#39; => 0,
   &#39;token&#39; => $token
]);


Kindeditor/php 아래에 콜백 추가

<?php
use Qiniu\Auth;
 
require_once __DIR__."/config.php";
$_body = file_get_contents(&#39;php://input&#39;);
$auth = new Auth(QINIU_ACCESS_KEY, QINIU_SECRET_KEY);
//回调的contentType
$contentType = &#39;application/x-www-form-urlencoded&#39;;
//回调的签名信息,可以验证该回调是否来自七牛
$authorization = $_SERVER[&#39;HTTP_AUTHORIZATION&#39;];
$isQiniuCallback = $auth->verifyCallback($contentType, $authorization, CALLBACK_URL, $_body);
if (!$isQiniuCallback) {
    echo json_encode([
        &#39;error&#39; => 2,
        &#39;message&#39; => &#39;验证失败&#39;
    ]);
    die();
}
 
$body = $_POST;
$qiniu_url = QINIU_BUCKET_DOMAIN;
if (!empty($body[&#39;key&#39;])) {
    echo json_encode([
        &#39;error&#39; => 0,
        &#39;url&#39; => $qiniu_url.$body[&#39;key&#39;]
    ]);
    die();
}
echo json_encode([
    &#39;error&#39; => 1,
    &#39;message&#39; => &#39;视频上传出错&#39;
]);


Kindeditor/php 밑에 returnBack.php 추가 주로 수신주소 리다이렉트

<?php
use Qiniu\Auth;
 
require_once __DIR__."/config.php";
$upload_ret = base64_decode($_GET[&#39;upload_ret&#39;]);
$upload_ret = json_decode($upload_ret, true);
$qiniu_url = QINIU_BUCKET_DOMAIN;
if (!empty($upload_ret[&#39;key&#39;])) {
    echo json_encode([
        &#39;error&#39; => 0,
        &#39;url&#39; => $qiniu_url.$upload_ret[&#39;key&#39;]
    ]);
    die();
}
echo json_encode([
    &#39;error&#39; => 1,
    &#39;message&#39; => &#39;视频上传出错&#39;
]);


다음은 프론트엔드 변경인데, 제가 변경한 것은 동영상 업로드입니다

Kindeditor/plugins/ media/media.js

KindEditor.plugin(&#39;media&#39;, function(K) {
    var self = this, name = &#39;media&#39;, lang = self.lang(name + &#39;.&#39;),
        allowMediaUpload = K.undef(self.allowMediaUpload, true),
        allowFileManager = K.undef(self.allowFileManager, false),
        formatUploadUrl = K.undef(self.formatUploadUrl, true),
        extraParams = K.undef(self.extraFileUploadParams, {
            &#39;token&#39;: &#39;&#39;//添加token
        }),
        filePostName = K.undef(self.filePostName, &#39;file&#39;), //更改文件上传名
        uploadJson = K.undef(self.uploadJson, &#39;https://up.qbox.me&#39;); //更改上传地址,我用的时华东区的空间使用https
 
         
        ....
 
            function getQToken() {
                $.getJSON(&#39;/includes/kindeditor/php/qiniu_token.php&#39;, function (data) {
                    K(&#39;[name="token"]&#39;, div).val(data.token);
                });
            }
                        // 获取设置上传token
            getQToken();
 
            if (allowMediaUpload) {
                var uploadbutton = K.uploadbutton({
                    button : K(&#39;.ke-upload-button&#39;, div)[0],
                    fieldName : filePostName,
                    extraParams : extraParams,
                    url : uploadJson,//去除添加参数
                    afterUpload : function(data) {
            ...
});

 

이렇게 하면 Qiniu Cloud에 동영상을 업로드할 수 있습니다.


관련 권장 사항:

WeChat 애플릿을 Qiniu Cloud Storage에 연결하는 방법의 예

Qiniu Cloud를 사용하여 Laravel에서 이미지를 업로드하는 예

yii2 .0 OSS 샘플 코드


위 내용은 PHP 애플리케이션 Qiniu Cloud에 대한 리디렉션 업로드 및 콜백 업로드 공유 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.