全部產品
Search
文件中心

ApsaraVideo VOD:URL批量拉取上傳

更新時間:Sep 24, 2025

當檔案沒有儲存在本地且支援通過公網URL訪問時,您可使用ApsaraVideo for VOD封裝好的介面拉取上傳。該方式可以免去先將檔案下載到本地後再上傳到點播的過程,適用於離線搬站情境。

功能說明

  • URL批量拉取上傳是非同步任務,非即時,不保證時效性,一般提交後會在數小時、甚至數天內完成遷移上傳。如果對時效性要求較高,建議使用上傳SDK上傳檔案、或者使用OSS SDK上傳檔案

  • 同一個媒體檔案 URL,每次提交上傳任務都會在點播中產生一個新的媒體資源(即產生新的媒體 ID)。

  • URL批量拉取僅可使用視訊或音頻格式上傳,詳情請參見支援的媒體格式

  • 單個檔案超過20GB時,將導致上傳失敗,請使用其他上傳方式。

通過控制台上傳

控制台情境下,目前僅華東2(上海)地區支援通過URL拉取方式上傳音視頻,其他地區暫不支援該方式上傳。

  1. 登入ApsaraVideo for VOD控制台

  2. 在點播控制台左側導覽列的媒資庫地區,單擊音/視頻

  3. 單擊上傳音/視頻上傳音視頻

  4. 單擊添加音/視頻添加音視頻

  5. 添加上傳檔案,配置轉碼,單擊開始上傳

    選擇URL拉取方式時,若URL中不包含副檔名,為提高拉取成功率,請填寫副檔名。由於網路或資源所在服務地區的原因,您的拉取任務可能失敗,請調整網路或資源的服務地區後重新嘗試拉取。

    URL拉取

通過API方式上傳

推薦整合點播服務端SDK,調用點播的UploadMediaByURL - URL批量拉取上傳介面提交任務。該介面目前僅支援華東 2(上海)華北 2(北京)華南 1(深圳)新加坡美國矽谷)地區。

前提條件

  • 您已經開通了ApsaraVideo for VOD服務。開通步驟請參見開通ApsaraVideo for VOD服務

  • 您已經完成上傳相關的系統配置,包括啟用目標儲存地區的儲存地址和配置回調。操作指引請參見管理儲存Bucket回調設定

  • 您已準備好用於調用點播服務的帳號。為避免阿里雲帳號AccessKey泄露帶來的安全風險,推薦您建立RAM使用者並授予其VOD相關許可權。然後使用RAM使用者的AK對(AccessKey ID和AccessKey Secret)訪問點播服務。操作指引請參見建立RAM使用者並授權

  • 已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數

    重要
    • 阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。

    • 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

  • (可選)如需使用STS臨時授權方式(阿里雲Security Token Service)訪問點播服務,請為RAM使用者建立角色並授予角色VOD相關許可權。操作指引請參見擷取STS Token

範例程式碼

其他語言樣本請直接參考UploadMediaByURLSDK樣本

V1.0 SDK

步驟一、安裝依賴

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.6.1</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-vod</artifactId>
  <version>2.16.32</version>
</dependency>

步驟二、範例程式碼

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLRequest;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLResponse;

import java.net.URLEncoder;

/**
 * URL批量拉取上傳功能樣本
 *
 */
public class AudioOrVideoUploadByUrl {

    /** 
     * 讀取AccessKey資訊
     */
    public static DefaultAcsClient initVodClient() throws ClientException {
    // 點播服務接入地區
    String regionId = "cn-shanghai"; 
    // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
    // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
    // 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
    DefaultAcsClient client = new DefaultAcsClient(profile);
    return client;
    }

    /**
     * URL批量拉取上傳
     *
     * @param client 發送請求用戶端
     * @return UploadMediaByURLResponse URL批量拉取上傳響應資料
     * @throws Exception
     */
    public static UploadMediaByURLResponse uploadMediaByURL(DefaultAcsClient client) throws Exception {
        UploadMediaByURLRequest request = new UploadMediaByURLRequest();
        String url = "http://video_01.mp4";
        String encodeUrl = URLEncoder.encode(url, "UTF-8");
        //視頻源檔案URL
        request.setUploadURLs(encodeUrl);

        //上傳視頻中繼資料資訊
        JSONObject uploadMetadata = new JSONObject();
        //需要上傳的視頻源檔案URL,與UploadURLs裡的URL匹配才會生效
        uploadMetadata.put("SourceUrl", encodeUrl);
        //視頻標題
        uploadMetadata.put("Title", "upload by url sample");

        JSONArray uploadMetadataList = new JSONArray();
        uploadMetadataList.add(uploadMetadata);
        request.setUploadMetadatas(uploadMetadataList.toJSONString());

        //UserData,使用者自訂設定參數,使用者需要單獨回調URL及資料透傳時設定(非必須)
        JSONObject userData = new JSONObject();

        //UserData回調部分設定
        //訊息回調設定,指定時以此為準,否則以全域設定的事件通知為準
        JSONObject messageCallback = new JSONObject();
        //設定回調地址
        messageCallback.put("CallbackURL", "http://192.168.0.0/16");
        //設定回調類型,預設為http
        messageCallback.put("CallbackType", "http");
        userData.put("MessageCallback", messageCallback.toJSONString());

        JSONObject extend = new JSONObject();
        extend.put("MyId", "user-defined-id");
        userData.put("Extend", extend.toJSONString());

        request.setUserData(userData.toJSONString());

        return client.getAcsResponse(request);
    }

    /** 
     * 請求樣本
     */
    public static void main(String[] argv) {

        try {
            DefaultAcsClient client = initVodClient();
            UploadMediaByURLResponse response = uploadMediaByURL(client);
            System.out.print("UploadJobs = " + JSON.toJSONString(response.getUploadJobs()) + "\n");
            System.out.print("RequestId = " + response.getRequestId() + "\n");
        } catch (Exception e) {
            System.out.print("ErrorMessage = " + e.getLocalizedMessage());
        }
    }

}

V2.0 SDK

步驟一、安裝依賴

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>vod20170321</artifactId>
      <version>3.6.4</version>
    </dependency>

步驟二、範例程式碼

說明

工程代碼建議使用更安全的無AK方式,憑據配置方式請參見管理訪問憑據

package com.aliyun.sample;
import com.aliyun.tea.*;

public class UploadMediaByURL {

    /**
     * <b>description</b> :
     * <p>使用憑據初始化帳號Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.vod20170321.Client createClient() throws Exception {
        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // Endpoint 請參考 https://api.aliyun.com/product/vod
        config.endpoint = "vod.cn-shanghai.aliyuncs.com";
        return new com.aliyun.vod20170321.Client(config);
    }

    public static void main(String[] args_) throws Exception {

        com.aliyun.vod20170321.Client client = Sample.createClient();
        com.aliyun.vod20170321.models.UploadMediaByURLRequest uploadMediaByURLRequest = new com.aliyun.vod20170321.models.UploadMediaByURLRequest()
                .setUploadURLs("http://cloud.video.taobao.com/play/u/3897629815/p/1/e/6/t/1/301659704826.mp4");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 複製代碼運行請自行列印 API 的傳回值
            com.aliyun.vod20170321.models.UploadMediaByURLResponse response = client.uploadMediaByURLWithOptions(uploadMediaByURLRequest, runtime);
            com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            // 錯誤 message
            System.out.println(error.getMessage());
            // 診斷地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            // 錯誤 message
            System.out.println(error.getMessage());
            // 診斷地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }
}