文件上傳
上傳代碼
<?php require_once 'path_to_sdk/vendor/autoload.php'; // 引入鑒權類 use Qiniu\Auth; // 引入上傳類 use Qiniu\Storage\UploadManager; // 需要填寫你的 Access Key 和 Secret Key $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; // 構建鑒權對象 $auth = new Auth($accessKey, $secretKey); // 要上傳的空間 $bucket = 'Bucket_Name'; // 生成上傳 Token $token = $auth->uploadToken($bucket); // 要上傳文件的本地路徑 $filePath = './php-logo.png'; // 上傳到七牛后保存的文件名 $key = 'my-php-logo.png'; // 初始化 UploadManager 對象並進行文件的上傳。 $uploadMgr = new UploadManager(); // 調用 UploadManager 的 putFile 方法進行文件的上傳。 list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath); echo "\n====> putFile result: \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
上傳&回調
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\UploadManager; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; $auth = new Auth($accessKey, $secretKey); $bucket = 'Bucket_Name'; // 上傳文件到七牛后, 七牛將文件名和文件大小回調給業務服務器. $policy = array( 'callbackUrl' => 'http://your.domain.com/callback.php', 'callbackBody' => 'filename=$(fname)&filesize=$(fsize)' ); $uptoken = $auth->uploadToken($bucket, null, 3600, $policy); //上傳文件的本地路徑 $filePath = './php-logo.png'; $uploadMgr = new UploadManager(); list($ret, $err) = $uploadMgr->putFile($uptoken, null, $filePath); echo "\n====> putFile result: \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
上傳&預轉持續化(以視頻轉碼為例)
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\UploadManager; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; $auth = new Auth($accessKey, $secretKey); $bucket = 'Bucket_Name'; //轉碼是使用的隊列名稱。 $pipeline = 'abc'; //要進行轉碼的轉碼操作。 $fops = "avthumb/mp4/s/640x360/vb/1.25m"; //可以對轉碼后的文件進行使用saveas參數自定義命名,當然也可以不指定文件會默認命名並保存在當間。 $savekey = Qiniu\base64_urlSafeEncode('目標Bucket_Name:自定義文件key'); $fops = $fops.'|saveas/'.$savekey; $policy = array( 'persistentOps' => $fops, 'persistentPipeline' => $pipeline ); $uptoken = $auth->uploadToken($bucket, null, 3600, $policy); //上傳文件的本地路徑 $filePath = './php-logo.png'; $uploadMgr = new UploadManager(); list($ret, $err) = $uploadMgr->putFile($uptoken, null, $filePath); echo "\n====> putFile result: \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); } 注:上面的Demo只是針對視頻轉碼,如果需要別的功能比如音視頻切片、視頻截圖、視頻拼接只需要修改下上面的fops后面的參數就可以了, eg: $fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90"就表示視頻截圖了。 下面給出一些常見的數據處理功能,可以根據需要進行選擇: //------------------圖片縮放------------------- $fops ='imageView/2/w/200/h/200'; //------------------視頻轉碼------------------- // $fops ='avthumb/flv/vb/229k/vcodec/libx264/noDomain/1'; //------------------圖片水印------------------- $base64URL = Qiniu\base64_urlSafeEncode('http://developer.qiniu.com/resource/logo-2.jpg'); $fops = 'watermark/1/image/'.$base64URL; //------------------視頻切片------------------- $fops = 'avthumb/m3u8/pattern/'.$savets; //切片與加密參數 $fops = 'avthumb/m3u8/vb/640k/hlsKey/MDEyMzQ1Njc4OTEyMzQ1Ng==/hlsKeyUrl/aHR0cDovLzd4bGVrYi5jb20yLnowLmdsYi5xaW5pdWNkbi5jb20vcWluaXV0ZXN0LmtleQ=='; //------------------文檔轉換------------------- $fops = 'yifangyun_preview'; //------------------視頻截圖------------------- $fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90'; //------------------視頻拼接------------------- //拼接視頻片段時要保證所有源的畫面長寬值一致 //除去作為數據處理對象的源文件以外,還可以指定最多5個源文件(即總計6個片段) //所有源文件必須屬於同一存儲空間 //格式:avconcat/<Mode>/format/<Format>/<encodedUrl0>/<encodedUrl1>/<encodedUrl2>/... $encodedUrl1 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie2.flv'); $encodedUrl2 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie3.avi'); $fops = 'avconcat/2/format/mp4/'.$encodedUrl1.'/'.$encodedUrl2; //------------------多文件壓縮------------------- //可將若干七牛空間中的資源文件,在七牛服務端壓縮后存儲 //格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL> $encodedfile1 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg'); $encodedfile2 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4'); $encodedfile3 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3'); $fops = 'mkzip/2/url/'.$encodedfile1.'/url/'.$encodedfile2.'/url/'.$encodedfile3;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
可以看到上傳成功后的回調行為主要是有上傳 Token
中的 put policy
來指定。其中put policy可以指定的行為不止這些,具體可以參考簽權類中的policy字段:
private static $policyFields = array( 'callbackUrl', 'callbackBody', 'callbackHost', 'callbackBodyType', 'callbackFetchKey', 'returnUrl', 'returnBody', 'endUser', 'saveKey', 'insertOnly', 'detectMime', 'mimeLimit', 'fsizeLimit', 'persistentOps', 'persistentNotifyUrl', 'persistentPipeline', );
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
下面我們給一個例子來看怎么接收回調信息,並驗證該回調是否來自七牛:
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; $auth = new Auth($accessKey, $secretKey); //獲取回調的body信息 $callbackBody = file_get_contents('php://input'); //回調的contentType $contentType = 'application/x-www-form-urlencoded'; //回調的簽名信息,可以驗證該回調是否來自七牛 $authorization = $_SERVER['HTTP_AUTHORIZATION']; //七牛回調的url,具體可以參考。 $url = 'http://your.domain.com/callback.php'; $isQiniuCallback = $auth->verifyCallback($contentType, $authorization, $url, $callbackBody); if ($isQiniuCallback) { $resp = array('ret' => 'success'); } else { $resp = array('ret' => 'failed'); } echo json_encode($resp);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
文件下載
下載代碼
<?php require 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; $auth = new Auth($accessKey, $secretKey); //baseUrl構造成私有空間的域名/key的形式 $baseUrl = 'http://domain/key'; $authUrl = $auth->privateDownloadUrl($baseUrl); echo $authUrl; ?>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
空間資源的管理
獲取文件的信息
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\BucketManager; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; //初始化Auth狀態: $auth = new Auth($accessKey, $secretKey); //初始化BucketManager $bucketMgr = new BucketManager($auth); //你要測試的空間, 並且這個key在你空間中存在 $bucket = 'Bucket_Name'; $key = 'php-logo.png'; //獲取文件的狀態信息 list($ret, $err) = $bucketMgr->stat($bucket, $key); echo "\n====> $key stat : \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
移動單個文件
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\BucketManager; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; //初始化Auth狀態: $auth = new Auth($accessKey, $secretKey); //初始化BucketManager $bucketMgr = new BucketManager($auth); //你要測試的空間, 並且這個key在你空間中存在 $bucket = 'Bucket_Name'; $key = 'php-logo.png'; //獲取文件的狀態信息 list($ret, $err) = $bucketMgr->stat($bucket, $key); echo "\n====> $key stat : \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
復制單個文件
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\BucketManager; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; //初始化Auth狀態: $auth = new Auth($accessKey, $secretKey); //初始化BucketManager $bucketMgr = new BucketManager($auth); //你要測試的空間, 並且這個key在你空間中存在 $bucket = 'Bucket_Name'; $key = 'php-logo.png'; //將文件從文件$key 復制到文件$key2。 可以在不同bucket復制 $key2 = 'php-logo2.png'; $err = $bucketMgr->copy($bucket, $key, $bucket, $key2); echo "\n====> copy $key to $key2 : \n"; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
刪除單個文件
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\BucketManager; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; //初始化Auth狀態: $auth = new Auth($accessKey, $secretKey); //初始化BucketManager $bucketMgr = new BucketManager($auth); //你要測試的空間, 並且這個key在你空間中存在 $bucket = 'Bucket_Name'; $key = 'php-logo.png'; //刪除$bucket 中的文件 $key $err = $bucketMgr->delete($bucket, $key); echo "\n====> delete $key : \n"; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
列舉空間中文件
<?php require_once __DIR__ . '/../autoload.php'; use Qiniu\Auth; use Qiniu\Storage\BucketManager; $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; $auth = new Auth($accessKey, $secretKey); $bucketMgr = new BucketManager($auth); // 要列取的空間名稱 $bucket = 'Bucket_Name'; // 要列取文件的公共前綴 $prefix = ''; $marker = ''; $limit = 3; list($iterms, $marker, $err) = $bucketMgr->listFiles($bucket, $prefix, $marker, $limit); if ($err !== null) { echo "\n====> list file err: \n"; var_dump($err); } else { echo "Marker: $marker\n"; echo "\nList Iterms====>\n"; var_dump($iterms); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
觸發持久化操作(以視頻轉碼為例)
視頻轉碼
<?php require_once 'path_to_sdk/vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Processing\PersistentFop; //對已經上傳到七牛的視頻發起異步轉碼操作 $accessKey = 'Access_Key'; $secretKey = 'Secret_Key'; $auth = new Auth($accessKey, $secretKey); //要轉碼的文件所在的空間和文件名。 $bucket = 'Bucket_Name'; $key = '1.mp4'; //轉碼是使用的隊列名稱。 $pipeline = 'abc'; $pfop = new PersistentFop($auth, $bucket, $pipeline); //要進行轉碼的轉碼操作。 $fops = "avthumb/mp4/s/640x360/vb/1.25m"; list($id, $err) = $pfop->execute($key, $fops); echo "\n====> pfop avthumb result: \n"; if ($err != null) { var_dump($err); } else { echo "PersistentFop Id: $id\n"; } //查詢轉碼的進度和狀態 list($ret, $err) = $pfop->status($id); echo "\n====> pfop avthumb status: \n"; if ($err != null) { var_dump($err); } else { var_dump($ret); } 注:同樣,上面的Demo只是針對視頻轉碼,如果需要別的功能比如音視頻切片、視頻截圖、視頻拼接只需要修改下上面的fops后面的參數就可以了, eg: $fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90"就表示視頻截圖了。 下面給出一些常見的數據處理功能,可以根據需要進行選擇: //------------------圖片縮放------------------- $fops ='imageView/2/w/200/h/200'; //------------------視頻轉碼------------------- // $fops ='avthumb/flv/vb/229k/vcodec/libx264/noDomain/1'; //------------------圖片水印------------------- $base64URL = Qiniu\base64_urlSafeEncode('http://developer.qiniu.com/resource/logo-2.jpg'); $fops = 'watermark/1/image/'.$base64URL; //------------------視頻切片------------------- $fops = 'avthumb/m3u8/pattern/'.$savets; //切片與加密參數 $fops = 'avthumb/m3u8/vb/640k/hlsKey/MDEyMzQ1Njc4OTEyMzQ1Ng==/hlsKeyUrl/aHR0cDovLzd4bGVrYi5jb20yLnowLmdsYi5xaW5pdWNkbi5jb20vcWluaXV0ZXN0LmtleQ=='; //------------------文檔轉換------------------- $fops = 'yifangyun_preview'; //------------------視頻截圖------------------- $fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90'; //------------------視頻拼接------------------- //拼接視頻片段時要保證所有源的畫面長寬值一致 //除去作為數據處理對象的源文件以外,還可以指定最多5個源文件(即總計6個片段) //所有源文件必須屬於同一存儲空間 //格式:avconcat/<Mode>/format/<Format>/<encodedUrl0>/<encodedUrl1>/<encodedUrl2>/... $encodedUrl1 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie2.flv'); $encodedUrl2 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie3.avi'); $fops = 'avconcat/2/format/mp4/'.$encodedUrl1.'/'.$encodedUrl2; //------------------多文件壓縮------------------- //可將若干七牛空間中的資源文件,在七牛服務端壓縮后存儲 //格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL> $encodedfile1 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg'); $encodedfile2 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4'); $encodedfile3 = Qiniu\base64_urlSafeEncode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3'); $fops = 'mkzip/2/url/'.$encodedfile1.'/url/'.$encodedfile2.'/url/'.$encodedfile3;