Topik ini menyediakan contoh lengkap tentang cara menggunakan kit pengembangan perangkat lunak (SDK) unggah sisi server untuk PHP guna mengunggah berbagai file media ke penyimpanan di ApsaraVideo VOD.
Ikhtisar
Catatan Arsitektur B/S (Browser/Server) direkomendasikan untuk pengembangan PHP.
PHP upload SDK mengikuti proses umum SDK sisi server ApsaraVideo VOD. Untuk informasi selengkapnya, lihat Proses unggah. Proses dasar penggunaan PHP upload SDK adalah sebagai berikut:
Lengkapi prasyarat. Untuk informasi selengkapnya, lihat Prasyarat.
Integrasikan PHP upload SDK. Untuk informasi selengkapnya, lihat Integrasikan PHP upload SDK.
Implementasikan logika unggah, yang melibatkan konfigurasi informasi unggah.
Titik akhir default untuk PHP upload SDK adalah cn-shanghai (Shanghai). Untuk mengunggah file media ke wilayah lain, Anda dapat menentukan wilayah saat menginisialisasi AliyunVodUploader. Untuk informasi selengkapnya tentang titik akhir yang didukung oleh ApsaraVideo VOD, lihat Endpoints.
Contoh berikut menunjukkan cara mengatur wilayah unggah ke cn-beijing (Beijing):
$apiRegionId = 'cn-beijing'; // Wilayah tujuan untuk unggah.
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret, $apiRegionId);
Prasyarat
-
ApsaraVideo VOD telah diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan ApsaraVideo VOD.
-
Pengaturan sistem yang diperlukan untuk unggah, termasuk jalur penyimpanan di wilayah yang ditentukan dan pengaturan callback, telah dikonfigurasi. Untuk informasi selengkapnya, lihat Kelola bucket penyimpanan dan Konfigurasi callback.
-
RAM user telah dibuat dan digunakan untuk mengakses ApsaraVideo VOD. Untuk mencegah risiko keamanan akibat kebocoran pasangan AccessKey Akun Alibaba Cloud Anda, kami menyarankan Anda membuat RAM user dan memberikan izin yang diperlukan untuk mengakses ApsaraVideo VOD. Kemudian, Anda dapat menggunakan pasangan AccessKey RAM user tersebut untuk mengakses ApsaraVideo VOD. Untuk informasi selengkapnya, lihat Buat RAM user dan berikan izin.
Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. Untuk informasi selengkapnya, lihat Konfigurasi variabel lingkungan di Linux, macOS, dan Windows.
Penting Pasangan AccessKey Akun Alibaba Cloud memiliki izin atas semua operasi API. Kami menyarankan Anda menggunakan pasangan AccessKey RAM user untuk memanggil operasi API atau melakukan O&M rutin.
Kami menyarankan agar Anda tidak menyematkan ID AccessKey dan Rahasia AccessKey secara langsung ke dalam kode proyek Anda. Jika tidak, pasangan AccessKey tersebut dapat bocor dan keamanan seluruh sumber daya dalam akun Anda akan terganggu.
-
Opsional. Buat role untuk RAM user dan berikan izin yang diperlukan untuk mengakses ApsaraVideo VOD jika Anda ingin mengakses ApsaraVideo VOD menggunakan Security Token Service (STS). Untuk informasi selengkapnya, lihat Dapatkan token STS.
Integrasikan PHP upload SDK
Unduh SDK dan demo.
Ekstrak VodUploadSDK-PHP_1.0.3.zip dan salin folder voduploadsdk dari direktori VodUploadSDK-PHP_1.0.3 ke proyek Anda.
Struktur direktori PHP upload SDK
Jalur: VodUploadSDK-PHP_1.0.3/voduploadsdk/uploader
Jalur: VodUploadSDK-PHP_1.0.3/voduploadsdk
aliyun-php-sdk-core: Dependensi yang menyediakan kelas dasar untuk upload SDK. Mengenkapsulasi penandatanganan API Alibaba Cloud, permintaan HTTP, dan fungsionalitas inti lainnya.
aliyun-php-sdk-vod: SDK API sisi server untuk ApsaraVideo VOD. Mengenkapsulasi permintaan untuk API ApsaraVideo VOD.
aliyun-php-sdk-oss: Dependensi yang menyediakan kelas OSS untuk upload SDK. Mengenkapsulasi operasi unggah OSS dan fungsi terkait lainnya.
Jalur: VodUploadSDK-PHP_1.0.3/samples
uploadVideo.php: Kode contoh untuk mengunggah video.
uploadImage.php: Kode contoh untuk mengunggah gambar.
uploadAttachedMedia.php: Kode contoh untuk mengunggah aset media pendukung.
Skenario 1: Unggah file audio dan video
File audio dan video standar
Anda dapat mengunggah jenis file audio dan video berikut:
Anda dapat mengunggah file lokal menggunakan unggah multi-bagian. Ukuran satu file bisa mencapai 48,8 TB. Unggah yang dapat dilanjutkan kembali tidak didukung. Untuk informasi selengkapnya, lihat fungsi `testUploadLocalVideo`.
Anda dapat mengunggah file web dengan menentukan URL file. Ukuran satu file bisa mencapai 48,8 TB. Metode ini memerlukan file web diunduh ke disk lokal sebelum diunggah. Pastikan disk lokal Anda memiliki ruang yang cukup. Untuk informasi selengkapnya, lihat fungsi `testUploadWebVideo`.
Klik untuk melihat kode contoh
<?php
/**
* Dibuat oleh Aliyun ApsaraVideo VOD.
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// Uji unggah video lokal.
function testUploadLocalVideo($accessKeyId, $accessKeySecret, $filePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($filePath, 'testUploadLocalVideo via PHP-SDK');
//$uploadVideoRequest->setCateId(1);
// Contoh CoverURL: http://example.com/example****.jpg
//$uploadVideoRequest->setCoverURL("<your CoverURL>");
//$uploadVideoRequest->setTags('test1,test2');
//$uploadVideoRequest->setStorageLocation('outin-xx.oss-cn-beijing.aliyuncs.com');
//$uploadVideoRequest->setTemplateGroupId('6ae347b0140181ad371d197ebe289****');
$userData = array(
// Contoh Callback: https://demo.aliyundoc.com/ProcessMessageCallback
"MessageCallback"=>array("CallbackURL"=>"<your callback URL>"),
"Extend"=>array("localId"=>"xxx", "test"=>"www")
);
$uploadVideoRequest->setUserData(json_encode($userData));
$res = $uploader->uploadLocalVideo($uploadVideoRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalVideo Gagal, PesanKesalahan: %s\n Lokasi: %s %s\n Jejak: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
// Uji unggah video web.
function testUploadWebVideo($accessKeyId, $accessKeySecret, $fileURL)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($fileURL, 'testUploadWebVideo via PHP-SDK');
$res = $uploader->uploadWebVideo($uploadVideoRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebVideo Gagal, PesanKesalahan: %s\n Lokasi: %s %s\n Jejak: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
#### Jalankan kode uji ####
// Pasangan AccessKey Akun Alibaba Cloud memiliki izin untuk mengakses semua API. Gunakan pasangan AccessKey RAM user untuk akses API atau O&M harian.
// Jangan menyematkan ID AccessKey dan Rahasia AccessKey secara langsung ke dalam kode proyek Anda. Hal ini dapat menyebabkan kebocoran pasangan AccessKey dan membahayakan keamanan semua sumber daya dalam akun Anda.
// Contoh ini menunjukkan cara menggunakan pasangan AccessKey dari variabel lingkungan untuk mengautentikasi akses API. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/video/sample.mp4';
// testUploadLocalVideo($accessKeyId, $accessKeySecret, $localFilePath);
// Contoh webFileURL: http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-a0bc05ba62c3e95cc672e88b8281****-ld.mp4?auth_key=1608774986-0-0-c56acd302bea0c331370d8ed6865****
$webFileURL = '<your webFileURL>';
testUploadWebVideo($accessKeyId, $accessKeySecret, $webFileURL);
File video M3U8
Kode berikut memberikan contoh:
Klik untuk melihat kode contoh
<?php
/**
* Dibuat oleh Aliyun ApsaraVideo VOD.
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// Uji unggah video M3U8 lokal.
function testUploadLocalM3u8($accessKeyId, $accessKeySecret, $m3u8FilePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($m3u8FilePath, 'testUploadLocalM3u8 via PHP-SDK');
// Panggil API untuk mengurai daftar alamat shard dari file M3U8. Jika hasil penguraian tidak akurat, gabungkan sendiri daftar alamat tersebut. Secara default, file shard dan file M3U8 berada di direktori yang sama.
$sliceFiles = $uploader->parseM3u8File($m3u8FilePath);
//print_r($sliceFiles);
$res = $uploader->uploadLocalM3u8($uploadVideoRequest, $sliceFiles);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalM3u8 Gagal, PesanKesalahan: %s\n Lokasi: %s %s\n Jejak: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
// Uji unggah video M3U8 web.
function testUploadWebM3u8($accessKeyId, $accessKeySecret, $m3u8FileUrl)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($m3u8FileUrl, 'testUploadWebM3u8 via PHP-SDK');
// Panggil API untuk mengurai daftar alamat shard dari file M3U8. Jika hasil penguraian tidak akurat, gabungkan sendiri daftar alamat tersebut. Secara default, file shard dan file M3U8 berada di direktori yang sama.
$sliceFileUrls = $uploader->parseM3u8File($m3u8FileUrl);
//print_r($sliceFileUrls);
$res = $uploader->uploadWebM3u8($uploadVideoRequest, $sliceFileUrls);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebM3u8 Gagal, PesanKesalahan: %s\n Lokasi: %s %s\n Jejak: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
#### Jalankan kode uji ####
// Pasangan AccessKey Akun Alibaba Cloud memiliki izin untuk mengakses semua API. Gunakan pasangan AccessKey RAM user untuk akses API atau O&M harian.
// Jangan menyematkan ID AccessKey dan Rahasia AccessKey secara langsung ke dalam kode proyek Anda. Hal ini dapat menyebabkan kebocoran pasangan AccessKey dan membahayakan keamanan semua sumber daya dalam akun Anda.
// Contoh ini menunjukkan cara menggunakan pasangan AccessKey dari variabel lingkungan untuk mengautentikasi akses API. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localM3u8FilePath = '/opt/video/m3u8/sample.m3u8';
//testUploadLocalM3u8($accessKeyId, $accessKeySecret, $localM3u8FilePath);
// Contoh webM3u8FileURL: http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-195a25af366b5edae324c47e99a0****-ld.m3u8?auth_key=1608775606-0-0-9fb038deaecd009dadd86721c585****
$webM3u8FileURL = '<your webM3u8FileURL>';
//testUploadWebM3u8($accessKeyId, $accessKeySecret, $webM3u8FileURL);
Akselerasi unggah
Untuk mengunggah file besar (dalam satuan GB atau TB) atau melakukan unggah cross-region, seperti mengunggah video dari Tiongkok daratan ke alamat penyimpanan di wilayah penyimpanan Singapore, Anda dapat mengaktifkan fitur akselerasi unggah. Untuk informasi selengkapnya, lihat Metode aktivasi. Setelah mengaktifkan fitur ini, Anda harus menambahkan pasangan kunci-nilai AccelerateConfig key-value ke objek UserData dalam konfigurasi unggah. Jika objek UserData belum ada, buatlah. Kode berikut memberikan contoh:
$userData = array(
"AccelerateConfig"=>array("Type"=>"oss","Domain"=>"****Bucket.oss-accelerate.aliyuncs.com"),
);
$uploadVideoRequest->setUserData(json_encode($userData));
Deskripsi parameter
Nama | Tipe | Deskripsi |
Type | string | Jenis akselerasi unggah yang diaktifkan. Hanya `oss` yang didukung. |
Domain | string | Titik akhir percepatan untuk bucket pengguna. HTTPS digunakan secara default.
Catatan Gunakan titik akhir percepatan yang diberikan setelah aktivasi, misalnya `vod-*******.oss-accelerate.aliyuncs.com`. |
Skenario 2: Unggah gambar
Klik untuk melihat kode contoh
Klik untuk melihat kode contoh
<?php
/**
* Dibuat oleh Aliyun ApsaraVideo VoD.
* Pengguna: https://www.aliyun.com/product/vod
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// Uji unggah gambar lokal.
function testUploadLocalImage($accessKeyId, $accessKeySecret, $filePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadImageRequest = new UploadImageRequest($filePath, 'testUploadLocalImage via PHP-SDK');
$uploadImageRequest->setCateId(1000009458);
$res = $uploader->uploadLocalImage($uploadImageRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalImage Gagal, PesanKesalahan: %s\n", $e->getMessage());
}
}
// Uji unggah gambar web.
function testUploadWebImage($accessKeyId, $accessKeySecret, $fileURL)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadImageRequest = new UploadImageRequest($fileURL, 'testUploadWebImage via PHP-SDK');
$uploadImageRequest->setCateId(1000009458);
$res = $uploader->uploadWebImage($uploadImageRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebImage Gagal, PesanKesalahan: %s\n", $e->getMessage());
}
}
#### Jalankan kode uji ####
// Pasangan AccessKey Akun Alibaba Cloud memiliki izin untuk mengakses semua API. Gunakan pasangan AccessKey RAM user untuk akses API atau O&M harian.
// Jangan menyematkan ID AccessKey dan Rahasia AccessKey secara langsung ke dalam kode proyek Anda. Hal ini dapat menyebabkan kebocoran pasangan AccessKey dan membahayakan keamanan semua sumber daya dalam akun Anda.
// Contoh ini menunjukkan cara menggunakan pasangan AccessKey dari variabel lingkungan untuk mengautentikasi akses API. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/image/test-image.jpg';
//testUploadLocalImage($accessKeyId, $accessKeySecret, $localFilePath);
$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebImage($accessKeyId, $accessKeySecret, $webFileURL);
Skenario 3: Unggah aset media pendukung
Kode berikut memberikan contoh:
Klik untuk melihat kode contoh
Klik untuk melihat kode contoh
<?php
/**
* Dibuat oleh Aliyun ApsaraVideo VoD.
* Pengguna: https://www.aliyun.com/product/vod
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// Uji unggah aset media pendukung lokal.
function testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $filePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadAttachedRequest = new UploadAttachedMediaRequest($filePath, 'watermark',
'testUploadLocalAttachedMedia via PHP-SDK');
//$uploadAttachedRequest->setCateId(100000****);
$res = $uploader->uploadLocalAttachedMedia($uploadAttachedRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalAttachedMedia Gagal, PesanKesalahan: %s\n", $e->getMessage());
}
}
// Uji unggah aset media pendukung web.
function testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $fileURL)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadAttachedRequest = new UploadAttachedMediaRequest($fileURL, 'watermark',
'testUploadWebAttachedMedia via PHP-SDK');
//$uploadAttachedRequest->setCateId(100000****);
$res = $uploader->uploadWebAttachedMedia($uploadAttachedRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebAttachedMedia Gagal, PesanKesalahan: %s\n", $e->getMessage());
}
}
#### Jalankan kode uji ####
// Pasangan AccessKey Akun Alibaba Cloud memiliki izin untuk mengakses semua API. Gunakan pasangan AccessKey RAM user untuk akses API atau O&M harian.
// Jangan menyematkan ID AccessKey dan Rahasia AccessKey secara langsung ke dalam kode proyek Anda. Hal ini dapat menyebabkan kebocoran pasangan AccessKey dan membahayakan keamanan semua sumber daya dalam akun Anda.
// Contoh ini menunjukkan cara menggunakan pasangan AccessKey dari variabel lingkungan untuk mengautentikasi akses API. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/image/test.png';
//testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $localFilePath);
$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $webFileURL);