全部产品
Search
文档中心

ApsaraVideo VOD:Unggah file menggunakan PHP SDK

更新时间:Jan 29, 2026

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:

  1. Lengkapi prasyarat. Untuk informasi selengkapnya, lihat Prasyarat.

  2. Integrasikan PHP upload SDK. Untuk informasi selengkapnya, lihat Integrasikan PHP upload SDK.

  3. Implementasikan logika unggah, yang melibatkan konfigurasi informasi unggah.

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

  1. Unduh SDK dan demo.

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

  • UploadVideoRequest.php

    Direktori

    Deskripsi

    UploadVideoRequest

    Kelas permintaan untuk mengunggah video. Untuk informasi selengkapnya tentang bidang-bidangnya, lihat CreateUploadVideo.

  • UploadImageRequest.php

    Direktori

    Deskripsi

    UploadImageRequest

    Kelas permintaan untuk mengunggah gambar. Untuk informasi selengkapnya tentang bidang-bidangnya, lihat CreateUploadImage.

  • UploadAttachedMediaRequest.php

    Direktori

    Deskripsi

    UploadAttachedMediaRequest

    Kelas permintaan untuk mengunggah aset media pendukung. Untuk informasi selengkapnya tentang bidang-bidangnya, lihat CreateUploadAttachedMedia.

  • AliyunVodUploader.php

    Direktori

    Deskripsi

    __construct

    Mengatur AccessKey untuk unggah, pusat ApsaraVideo VOD, dan titik akhir. Untuk informasi selengkapnya, lihat AccessKey dan ID wilayah ApsaraVideo VOD.

    uploadLocalVideo

    Antarmuka untuk mengunggah video lokal.

    uploadWebVideo

    Antarmuka untuk mengunggah video web.

    uploadLocalImage

    Mengunggah gambar lokal.

    uploadWebImage

    Mengunggah gambar web.

    uploadLocalAttachedMedia

    Mengunggah aset media pendukung lokal.

    uploadWebAttachedMedia

    Mengunggah aset media pendukung web.

    uploadLocalM3u8

    Mengunggah file M3U8 lokal.

    uploadWebM3u8

    Mengunggah file M3U8 web.

    parseM3u8File

    Mengurai manifes M3U8 untuk mendapatkan daftar alamat shard.

    setEcsRegionId

    Mengatur wilayah tempat skrip unggah dideploy pada instance ECS, jika berlaku. Jika wilayah tersebut sama dengan wilayah penyimpanan ApsaraVideo VOD, unggah jaringan internal akan diaktifkan secara otomatis.

    setEnableSSL

    Menentukan apakah SSL diaktifkan (gunakan HTTPS untuk permintaan jaringan). Secara default dinonaktifkan untuk mencegah masalah ketika ekstensi terkait tidak diinstal atau dikonfigurasi secara salah.

    uploadProgressCallback

    Fungsi callback untuk progres unggah. Anda dapat menulis ulang fungsi ini.

  • AliyunVodUtils.php

    Direktori

    Deskripsi

    AliyunVodUtils

    Kelas utilitas yang menyediakan fungsi statis, seperti fungsi untuk memotong string, mendapatkan ekstensi file, dan mendapatkan nama file.

    AliyunVodLog

    Kelas log untuk pencetakan sederhana. `logSwitch` adalah sakelar log.

    AliyunVodDownloader

    Mengunduh file web.

    AliyunVodReportUpload

    Melaporkan progres unggah.

    AliyunVodError

    Menentukan kode kesalahan.

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);

Referensi

Ikhtisar unggah media

Ikhtisar SDK STS