全部產品
Search
文件中心

ApsaraVideo VOD:使用Java SDK上傳檔案

更新時間:Jul 13, 2024

本文通過樣本詳細介紹如何使用服務端上傳SDK(Java語言)將各類媒體檔案上傳至點播儲存。

整體說明

從內部邏輯角度看,Java上傳SDK遵循點播服務端SDK的通用流程。詳情請參見上傳流程。從操作角度看,使用Java上傳SDK的基礎流程如下:

  1. 完成前提條件。詳細資料請參見前提條件

  2. 整合Java上傳SDK。詳細資料請參見整合Java上傳SDK

  3. 實現上傳邏輯(主要是上傳資訊配置)。

前提條件

  • 您已經開通了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臨時授權方案上傳視頻

    說明

    STS臨時授權方式的適用情境請參見憑證方式與STS方式對比

整合Java上傳SDK

說明

本文以Java 1.8及以上版本、Java上傳SDK 1.4.15版本舉例說明整合步驟。其他版本請根據實際情況操作。上傳SDK暫不支援依賴,您需要下載並引入jar包。如果整合遇到問題,請參見常見問題排查。

  1. 下載Java上傳SDK及範例程式碼。

    說明
    • 最新版本的下載地址請參見上傳SDK。歷史版本功能請參見Java上傳SDK發布歷史

    • 完整的上傳範例程式碼,請參見Java上傳SDK解壓目錄中的sample/UploadVideoDemo.java檔案。

  2. 解壓Java上傳SDK及範例程式碼檔案。

    以最新版本VODUploadDemo-java-1.4.15.zip為例,解壓後的檔案如下:

    • lib:存放Java上傳SDK所需要的jar包。

    • sample:存放Java上傳SDK的範例程式碼。

  3. 引入Jar包。

    • 如果您在Eclipse環境整合:在Eclipse中右擊您的工程,選擇Properties > Java Build Path > Add JARs。找到解壓後的VODUploadDemo-java-1.4.15檔案,並將lib目錄下的所有jar檔案添加到您的專案中。

    • 如果您在IntelliJ IDEA整合:在IntelliJ IDEA中開啟您的工程,選擇File > Project Structure > Modules,單擊右側Dependencies,然後單擊+,再單擊JARs or directories。找到解壓後的VODUploadDemo-java-1.4.15檔案,並將lib目錄下的所有jar檔案添加到您的專案中。

    重要

    引入Jar包後仍然需要配置依賴。

  4. 添加阿里雲Java SDK、OSS SDK、ApsaraVideo for VOD服務端SDK、ApsaraVideo for VOD服務端上傳SDK等依賴。

    重要
    • 以上依賴必須全部匯入,否則會導致整合失敗。

    • 使用最新版本Jar包(aliyun-java-vod-upload-1.4.15.jar)時,需保證aliyun-sdk-oss的版本號碼不低於3.9.0,aliyun-java-sdk-vod的版本號碼不低於2.16.11。

    • 目前ApsaraVideo for VOD已在中國內地發布的地區有上海、深圳、北京。若使用1.4.14及以前版本的上傳SDK上傳到深圳、北京地區時,需保證aliyun-java-sdk-vod版本號碼不低於2.15.11、aliyun-java-sdk-core版本號碼不低於4.4.5;若使用1.4.15及以後版本的上傳SDK上傳到深圳、北京地區時,需保證aliyun-java-sdk-vod版本號碼不低於2.16.11、aliyun-java-sdk-core版本號碼不低於4.4.5。

    展開查看依賴

       <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>
         <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-vod</artifactId>
            <version>2.16.11</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20170516</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.vod</groupId>
            <artifactId>upload</artifactId>
            <version>1.4.15</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath>
        </dependency>
                            

情境一:上傳音視頻

普通音視頻檔案

音視頻上傳目前支援四種方式上傳:

  • 上傳本地檔案,使用分區上傳,並支援斷點續傳。請參見範例程式碼中的testUploadVideo函數。

    • 當斷點續傳關閉時,最大支援上傳任務執行時間為3000秒,具體可上傳檔案大小與您的網路頻寬及磁碟讀寫能力有關。

    • 當斷點續傳開啟時,最大支援48.8 TB的單個檔案。

      重要

      斷點續傳開啟後,上傳任務執行過程中,同時會將當前上傳位置寫入本地磁碟檔案,影響您上傳檔案的速度,請您根據檔案大小選擇是否開啟。

  • 上傳網路流,可指定檔案URL進行上傳,支援斷點續傳,最大支援48.8 TB的單個檔案。該上傳方式需要先將網路檔案下載到本地磁碟,再進行上傳,所以要保證本地磁碟有充足的空間。請參見範例程式碼中的testUploadURLStream函數。

  • 上傳檔案流,可指定本地檔案進行上傳,不支援斷點續傳,最大支援5 GB的單個檔案。請參見範例程式碼中的testUploadFileStream函數。

  • 流式上傳,可指定輸入資料流進行上傳,支援檔案流和網路流等,不支援斷點續傳,最大支援5 GB的單個檔案。請參見範例程式碼中的testUploadStream函數。

重要

在使用範例程式碼時,需要手動引入對應的類。解決執行代碼過程中出現找不到相關依賴等問題,請參見常見問題

展開查看範例程式碼

public class UploadVideoDemo {
    // 帳號AK資訊請填寫(必選)
    // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
    // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
    // 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    public static void main(String[] args) {
    // 視頻檔案上傳
    // 視頻標題(必選)
    String title = "測試標題";
    // 1.本地檔案上傳和檔案流上傳時,檔案名稱為上傳檔案絕對路徑,如:/User/sample/檔案名稱.mp4 (必選)
    // 2.網路流上傳時,檔案名稱為源檔案名稱,如檔案名稱.mp4(必選)。
    // 3.流式上傳時,檔案名稱為源檔案名稱,如檔案名稱.mp4(必選)。
    // 任何上傳方式檔案名稱必須包含副檔名
    String fileName = "/Users/test/video/test.mp4";
    // 本地檔案上傳
    testUploadVideo(accessKeyId, accessKeySecret, title, fileName);

    // 待上傳視頻的網路流地址
    String url = "http://test.aliyun.com/video/test.mp4";

    // 2.網路流上傳
    // 副檔名,當url中不包含副檔名時,需要設定該參數
    String fileExtension = "mp4";
    testUploadURLStream(accessKeyId, accessKeySecret, title, url, fileExtension);

    // 3.檔案流上傳
    testUploadFileStream(accessKeyId, accessKeySecret, title, fileName);

    // 4.流式上傳,如檔案流和網路流
    InputStream inputStream = null;
    // 4.1 檔案流
    try {
        inputStream = new FileInputStream(fileName);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    // 4.2 網路流
    try {
        inputStream = new URL(url).openStream();
    } catch (IOException e) {
        e.printStackTrace();
    }
    testUploadStream(accessKeyId, accessKeySecret, title, fileName, inputStream);
}

/**
 * 本地檔案上傳介面
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 */
private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) {
    UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
    /* 可指定分區上傳時每個分區的大小,預設為2M位元組 */
    request.setPartSize(2 * 1024 * 1024L);
    /* 可指定分區上傳時的並發線程數,預設為1,(註:該配置會佔用伺服器CPU資源,需根據伺服器情況指定)*/
    request.setTaskNum(1);
    /* 是否開啟斷點續傳, 預設斷點續傳功能關閉。當網路不穩定或者程式崩潰時,再次發起相同上傳請求,可以繼續未完成的上傳任務,適用於逾時3000秒仍不能上傳完成的大檔案。
    注意:斷點續傳開啟後,會在上傳過程中將上傳位置寫入本地磁碟檔案,影響檔案上傳速度,請您根據實際情況選擇是否開啟*/
    //request.setEnableCheckpoint(false);
    /* OSS慢請求日誌列印逾時時間,是指每個分區上傳時間超過該閾值時會列印debug日誌,如果想屏蔽此日誌,請調整該閾值。單位:毫秒,預設為300000毫秒*/
    //request.setSlowRequestsThreshold(300000L);
    /* 可指定每個分區慢請求時列印日誌的時間閾值,預設為300s*/
    //request.setSlowRequestsThreshold(300000L);
    /* 是否顯示浮水印(可選),指定模板組ID時,根據模板組配置確定是否顯示浮水印*/
    //request.setIsShowWaterMark(true);
    /* 自訂訊息回調設定及上傳加速設定(可選), Extend為自訂擴充設定,MessageCallback為訊息回調設定,AccelerateConfig為上傳加速設定(上傳加速功能需要先申請開通後才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選) */
    //request.setCateId(0);
    /* 視頻標籤,多個用逗號分隔(可選) */
    //request.setTags("標籤1,標籤2");
    /* 視頻描述(可選)*/
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e5****");
    /* 工作流程ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 儲存地區(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟預設上傳進度回調 */
    //request.setPrintProgress(false);
    /* 設定自訂上傳進度回調(必須繼承 VoDProgressListener)*/
    /*預設關閉。如果開啟了這個功能,上傳過程中服務端會在日誌中返回上傳詳情。如果不需要接收此訊息,需關閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設定您實現的產生STS資訊的介面實作類別*/
    // request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl());
    /* 設定應用ID*/
    //request.setAppId("app-100****");
    /* 點播服務存取點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署地區*/
    // request.setEcsRegionId("cn-shanghai");

    /* 配置代理訪問(可選) */
    //OSSConfig ossConfig = new OSSConfig();
    /* <必填>設定Proxy 伺服器主機地址 */
    //ossConfig.setProxyHost("<yourProxyHost>");
    /* <必填>設定Proxy 伺服器連接埠 */
    //ossConfig.setProxyPort(-1);
    /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
    //ossConfig.setProtocol("HTTP");
    /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
    //ossConfig.setUserAgent("<yourUserAgent>");
    /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
    //ossConfig.setProxyUsername("<yourProxyUserName>");
    /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
    //ossConfig.setProxyPassword("<yourProxyPassword>");
    //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadVideoResponse response = uploader.uploadVideo(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n");  //請求ApsaraVideo for VOD服務的請求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果設定回調URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空白,此時需要根據返回錯誤碼分析具體錯誤原因 */
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
}

/**
 * URL網路流上傳。支援斷點續傳,最大支援48.8TB的單個檔案。
 * 該上傳方式需要先將網路檔案下載到本地磁碟,再進行上傳,所以要保證本地磁碟有充足的空間。
 * 當您設定的URL中不包括副檔名時,需要單獨設定fileExtension,表示副檔名。
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileExtension
 * @param url
 */
private static void testUploadURLStream(String accessKeyId, String accessKeySecret, String title, String url, String fileExtension) {
    UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, url);

    /* 副檔名*/
    request.setFileExtension(fileExtension);
    /* 網路檔案下載連線逾時,單位毫秒,0-表示不限制*/
    request.setDownloadConnectTimeout(1000);
    /* 網路檔案下載讀取逾時,單位毫秒,0-表示不限制*/
    request.setDownloadReadTimeout(0);
    /* 網路檔案下載後儲存的本地目錄*/
    request.setLocalDownloadFilePath("/Users/download");
    /* 是否顯示浮水印(可選),指定模板組ID時,根據模板組配置確定是否顯示浮水印*/
    //request.setShowWaterMark(true);
    /* 自訂訊息回調設定及上傳加速設定(可選),Extend為自訂擴充設定,MessageCallback為訊息回調設定,AccelerateConfig為上傳加速設定(上傳加速功能需要先申請開通後才能使用) */
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選) */
    //request.setCateId(0);
    /* 視頻標籤,多個用逗號分隔(可選) */
    //request.setTags("標籤1,標籤2");
    /* 視頻描述(可選) */
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流程ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 儲存地區(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟預設上傳進度回調 */
    //request.setPrintProgress(true);
    /* 設定自訂上傳進度回調 (必須繼承 VoDProgressListener)*/
    /*預設關閉。如果開啟了這個功能,上傳過程中服務端會在日誌中返回上傳詳情。如果不需要接收此訊息,需關閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設定應用ID*/
    //request.setAppId("app-100****");
    /* 點播服務存取點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署地區*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理訪問(可選) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>設定Proxy 伺服器主機地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>設定Proxy 伺服器連接埠 */
     //ossConfig.setProxyPort(-1);
     /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadURLStreamResponse response = uploader.uploadURLStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //請求ApsaraVideo for VOD服務的請求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果設定回調URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空白,此時需要根據返回錯誤碼分析具體錯誤原因 */
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
}

/**
 * 檔案流上傳介面
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 */
private static void testUploadFileStream(String accessKeyId, String accessKeySecret, String title, String fileName) {
    UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName);
    /* 是否使用預設浮水印(可選),指定模板組ID時,根據模板組配置確定是否使用預設浮水印*/
    //request.setShowWaterMark(true);
    /* 自訂訊息回調設定及上傳加速設定(可選),Extend為自訂擴充設定,MessageCallback為訊息回調設定,AccelerateConfig為上傳加速設定(上傳加速功能需要先申請開通後才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選)*/
    //request.setCateId(0);
    /* 視頻標籤,多個用逗號分隔(可選) */
    //request.setTags("標籤1,標籤2");
    /* 視頻描述(可選)*/
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流程ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 儲存地區(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟預設上傳進度回調 */
    //request.setPrintProgress(true);
    /* 設定自訂上傳進度回調(必須繼承 VoDProgressListener)*/
    /*預設關閉。如果開啟了這個功能,上傳過程中服務端會在日誌中返回上傳詳情。如果不需要接收此訊息,需關閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設定應用ID*/
    //request.setAppId("app-100****");
    /* 點播服務存取點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署地區*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理訪問(可選) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>設定Proxy 伺服器主機地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>設定Proxy 伺服器連接埠 */
     //ossConfig.setProxyPort(-1);
     /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadFileStreamResponse response = uploader.uploadFileStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //請求ApsaraVideo for VOD服務的請求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果設定回調URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空白,此時需要根據返回錯誤碼分析具體錯誤原因 */
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
}

/**
 * 流式上傳介面
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 * @param inputStream
 */
private static void testUploadStream(String accessKeyId, String accessKeySecret, String title, String fileName, InputStream inputStream) {
    UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);
     /* 是否使用預設浮水印(可選),指定模板組ID時,根據模板組配置確定是否使用預設浮水印*/
    //request.setShowWaterMark(true);
    /* 自訂訊息回調設定及上傳加速設定(可選), Extend為自訂擴充設定,MessageCallback為訊息回調設定,AccelerateConfig為上傳加速設定(上傳加速功能需要先申請開通後才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選) */
    //request.setCateId(0);
    /* 視頻標籤,多個用逗號分隔(可選) */
    //request.setTags("標籤1,標籤2");
    /* 視頻描述(可選)*/
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流程ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 儲存地區(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟預設上傳進度回調 */
    // request.setPrintProgress(true);
    /* 設定自訂上傳進度回調(必須繼承 VoDProgressListener) */
    /*預設關閉。如果開啟了這個功能,上傳過程中服務端會在日誌中返回上傳詳情。如果不需要接收此訊息,需關閉此功能*/
    // request.setProgressListener(new PutObjectProgressListener());
     /* 設定應用ID*/
    //request.setAppId("app-100****");
    /* 點播服務存取點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署地區*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理訪問(可選) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>設定Proxy 伺服器主機地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>設定Proxy 伺服器連接埠 */
     //ossConfig.setProxyPort(-1);
     /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);
        
    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadStreamResponse response = uploader.uploadStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n");  //請求ApsaraVideo for VOD服務的請求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else { //如果設定回調URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空白,此時需要根據返回錯誤碼分析具體錯誤原因
        System.out.print("VideoId=" + response.getVideoId() + "\n");
        System.out.print("ErrorCode=" + response.getCode() + "\n");
        System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
  }
}

M3U8檔案

展開查看範例程式碼

public class UploadVideoDemo {
    // 帳號AK資訊請填寫(必選)
    // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
    // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
    // 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    public static void main(String[] args) {
    //m3u8檔案上傳
        // 1.上傳本地m3u8音視頻檔案
        testUploadLocalM3u8(accessKeyId, accessKeySecret);
        // 2.上傳網路m3u8音視頻檔案
        testUploadWebM3u8(accessKeyId, accessKeySecret);
    }
    /**
     * 上傳本地m3u8視頻或音頻檔案到點播,m3u8檔案和分區檔案預設在同一目錄(sliceFilenames為空白時,會按照同一目錄去解析分區地址)
     *
     * @param request 本地m3u8上傳請求類
     *                m3u8Filename: 本地m3u8索引檔案的絕對路徑,且m3u8檔案的分區資訊必須是相對路徑,不能含有URL或本地絕對路徑
     *                sliceFilenames: ts分區檔案的絕對路徑列表,如指定則以此為準,若不指定,則自動解析 m3u8Filename 裡的m3u8檔案
     */
    private static void testUploadLocalM3u8(String accessKeyId, String accessKeySecret) {
        String title = "test_upload_local_m3u8";
        String m3u8Filename = "/Users/test/0e9ecfc6da934d1887ed7bdfc925****/cc38da35c7b24de0abe58619cdd7****-6479a12446b994719838e0307f****-ld.m3u8";
        UploadLocalM3u8Request request = new UploadLocalM3u8Request(accessKeyId, accessKeySecret, title, m3u8Filename);
        String[] sliceFilenames = new String[]{
                "/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00001.ts",
                "/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00002.ts",
                "/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00003.ts",
                "/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00004.ts",
                "/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00005.ts"
        };
        // ts分區檔案清單,可選,不指定時,直接解析m3u8FileURL擷取分區地址
        request.setSliceFilenames(sliceFilenames);
        /* 可指定分區上傳時每個分區的大小,預設為2M位元組 */
        request.setPartSize(2 * 1024 * 1024L);
        /* 可指定分區上傳時的並發線程數,預設為1,(註:該配置會佔用伺服器CPU資源,需根據伺服器情況指定)*/
        request.setTaskNum(1);
        /* 是否顯示浮水印(可選),指定模板組ID時,根據模板組配置確定是否顯示浮水印*/
        //request.setShowWaterMark(true);
        /* 自訂訊息回調設定及上傳加速設定(可選),Extend為自訂擴充設定,MessageCallback為訊息回調設定,AccelerateConfig為上傳加速設定(上傳加速功能需要先申請開通後才能使用)*/
        //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
        /* 視頻分類ID(可選)*/
        //request.setCateId(-1L);
        /* 視頻標籤,多個用逗號分隔(可選)*/
        //request.setTags("標籤1,標籤2");
        /* 視頻描述(可選)*/
        //request.setDescription("視頻描述");
        /* 封面圖片(可選)*/
        //request.setCoverURL("http://cover.sample.com/sample.jpg");
        /* 模板組ID(可選)*/
        //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
        /* 工作流程ID(可選)*/
        //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
        /* 儲存地區(可選)*/
        //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
        /* 設定應用ID*/
        // request.setAppId("app-1000000");
        /* 點播服務存取點 */
        // request.setApiRegionId("cn-shanghai");
        /* ECS部署地區*/
        // request.setEcsRegionId("cn-shanghai");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設定Proxy 伺服器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設定Proxy 伺服器連接埠 */
        //ossConfig.setProxyPort(-1);
        /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
        //ossConfig.setProxyPassword("<yourProxyPassword>");
        //request.setOssConfig(ossConfig);
        
        UploadM3u8FileImpl uploadM3u8File = new UploadM3u8FileImpl();
        UploadLocalM3u8Response uploadLocalM3u8Response = uploadM3u8File.uploadLocalM3u8(request);
        System.out.println("code = " + uploadLocalM3u8Response.getCode());
        System.out.println("message = " + uploadLocalM3u8Response.getMessage());
        System.out.println("videoId = " + uploadLocalM3u8Response.getVideoId());
        System.out.println("requestId = " + uploadLocalM3u8Response.getRequestId());
    }

    /**
     * 上傳網路m3u8視頻或音頻檔案到點播,需本地磁碟空間足夠,會先下載到本地臨時目錄,再上傳到點播儲存
     *
     * @param request 網路m3u8上傳請求類
     *                m3u8FileURL: 網路m3u8索引檔案的URL地址,且m3u8檔案的分區資訊必須是相對位址,不能含有URL或本地絕對路徑
     *                sliceFileURLs: ts分區檔案的URL地址清單;需自行拼接ts分區的URL地址清單
     */
    private static void testUploadWebM3u8(String accessKeyId, String accessKeySecret) {
        String title = "test_upload_web_m3u8";
        String m3u8FileURL = "http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-538087dcf2c201c31ce4324bf76af69****.m3u8";
        UploadWebM3u8Request request = new UploadWebM3u8Request(accessKeyId, accessKeySecret, title, m3u8FileURL);
        String[] sliceFileURLs = new String[]{
                "http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
                "http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
                "http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
                "http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
                "http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts"
        };
        // ts分區地址,可選,不指定時,直接解析m3u8FileURL擷取分區地址
        request.setSliceFileURLs(sliceFileURLs);
        /* 下載檔案的臨時儲存目錄,可自訂,如不指定則儲存到程式所啟動並執行目錄下*/
        // request.setGlobalLocalFilePath("/User/download/");
        /* 可指定分區上傳時每個分區的大小,預設為2M位元組 */
        request.setPartSize(2 * 1024 * 1024L);
        /* 可指定分區上傳時的並發線程數,預設為1,(註:該配置會佔用伺服器CPU資源,需根據伺服器情況指定)*/
        request.setTaskNum(1);
        /* 是否顯示浮水印(可選),指定模板組ID時,根據模板組配置確定是否顯示浮水印*/
        //request.setShowWaterMark(true);
        /* 自訂訊息回調設定及上傳加速設定(可選),Extend為自訂擴充設定,MessageCallback為訊息回調設定,AccelerateConfig為上傳加速設定(上傳加速功能需要先申請開通後才能使用)*/
        //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
        /* 視頻分類ID(可選)*/
        //request.setCateId(-1L);
        /* 視頻標籤,多個用逗號分隔(可選)*/
        //request.setTags("標籤1,標籤2");
        /* 視頻描述(可選)*/
        //request.setDescription("視頻描述");
        /* 封面圖片(可選)*/
        //request.setCoverURL("http://cover.example.com/sample.jpg");
        /* 模板組ID(可選)*/
        //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
        /* 工作流程ID(可選)*/
        //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
        /* 儲存地區(可選)*/
        //request.setStorageLocation("in-2017032321****-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
        /* 設定應用ID*/
        //request.setAppId("app-100****");
        /* 點播服務存取點 */
        //request.setApiRegionId("cn-shanghai");
        /* ECS部署地區*/
        // request.setEcsRegionId("cn-shanghai");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設定Proxy 伺服器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設定Proxy 伺服器連接埠 */
        //ossConfig.setProxyPort(-1);
        /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
        //ossConfig.setProxyPassword("<yourProxyPassword>");
        //request.setOssConfig(ossConfig);

        UploadM3u8FileImpl uploadM3u8File = new UploadM3u8FileImpl();
        UploadWebM3u8Response uploadWebM3u8Response = uploadM3u8File.uploadWebM3u8(request);
        System.out.println("code = " + uploadWebM3u8Response.getCode());
        System.out.println("message = " + uploadWebM3u8Response.getMessage());
        System.out.println("videoId = " + uploadWebM3u8Response.getVideoId());
        System.out.println("requestId = " + uploadWebM3u8Response.getRequestId());
    }
}

情境二:上傳圖片

展開查看範例程式碼

public class UploadImageDemo {
    // 帳號AK資訊請填寫(必選)
    // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
    // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
    // 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
    public static void main(String[] args) {
        // 圖片上傳
        // 1.圖片上傳-本地檔案上傳
         testUploadImageLocalFile(accessKeyId, accessKeySecret);
        // 2.圖片上傳-流式上傳(檔案流和網路流)
         testUploadImageStream(accessKeyId, accessKeySecret);
    }
    /**
     * 圖片上傳介面,本地檔案上傳樣本
     *
     * @param accessKeyId
     * @param accessKeySecret
     */
    private static void testUploadImageLocalFile(String accessKeyId, String accessKeySecret) {
        /* 圖片類型(必選)取值範圍:default(預設),cover(封面),watermark(浮水印)*/
        String imageType = "cover";
        UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType);
        request.setImageType("cover");
        /* 圖片副檔名(可選)取值範圍:png,jpg,jpeg */
        //request.setImageExt("png");
        /* 圖片標題(可選)長度不超過128個位元組,UTF8編碼 */
        //request.setTitle("圖片標題");
        /* 圖片標籤(可選)單個標籤不超過32位元組,最多不超過16個標籤,多個用逗號分隔,UTF8編碼 */
        //request.setTags("標籤1,標籤2");
        /* 儲存地區(可選)*/
        //request.setStorageLocation("out-4f3952f78c0211e8b30200****.oss-cn-shanghai.aliyuncs.com");
        /* 流式上傳時,InputStream為必選,fileName為源檔案名稱,如:檔案名稱.png(可選)*/
        String fileName = "/Users/demo/png/test.png";
        request.setFileName(fileName);
        /* 開啟預設上傳進度回調 */
        //request.setPrintProgress(false);
        /* 設定自訂上傳進度回調 (必須繼承 VoDProgressListener)*/
        /*預設關閉。如果開啟了這個功能,上傳過程中服務端會在日誌中返回上傳詳情。如果不需要接收此訊息,需關閉此功能*/
        // request.setProgressListener(new PutObjectProgressListener());
        /* 設定應用ID*/
        //request.setAppId("app-100****");
        /* 點播服務存取點 */
        //request.setApiRegionId("cn-shanghai");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設定Proxy 伺服器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設定Proxy 伺服器連接埠 */
        //ossConfig.setProxyPort(-1);
        /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
        //ossConfig.setProxyPassword("<yourProxyPassword>");
        //request.setOssConfig(ossConfig);

        UploadImageImpl uploadImage = new UploadImageImpl();
        UploadImageResponse response = uploadImage.upload(request);
        System.out.print("RequestId=" + response.getRequestId() + "\n");
        if (response.isSuccess()) {
            System.out.print("ImageId=" + response.getImageId() + "\n");
            System.out.print("ImageURL=" + response.getImageURL() + "\n");
        } else {
            System.out.print("ErrorCode=" + response.getCode() + "\n");
            System.out.print("ErrorMessage=" + response.getMessage() + "\n");
        }
    }
    /**
     * 圖片上傳介面,流式上傳樣本(支援檔案流和網路流)
     *
     * @param accessKeyId
     * @param accessKeySecret
     */
    private static void testUploadImageStream(String accessKeyId, String accessKeySecret) {
        /* 圖片類型(必選)取值範圍:default(預設),cover(封面),watermark(浮水印)*/
        String imageType = "cover";
        UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType);
        /* 圖片副檔名(可選)取值範圍:png,jpg,jpeg */
        //request.setImageExt("png");
        /* 圖片標題(可選)長度不超過128個位元組,UTF8編碼 */
        //request.setTitle("圖片標題");
        /* 圖片標籤(可選)單個標籤不超過32位元組,最多不超過16個標籤,多個用逗號分隔,UTF8編碼 */
        //request.setTags("標籤1,標籤2");
        /* 儲存地區(可選)*/
        //request.setStorageLocation("out-4f3952f78c0211e8b30200****.oss-cn-shanghai.aliyuncs.com");
        /* 流式上傳時,InputStream為必選,fileName為源檔案名稱,如:檔案名稱.png(可選)*/
        //request.setFileName("測試檔案名稱.png");
        /* 開啟預設上傳進度回調 */
        // request.setPrintProgress(true);
        /* 設定自訂上傳進度回調 (必須繼承 VoDProgressListener) */
        /*預設關閉。如果開啟了這個功能,上傳過程中服務端會在日誌中返回上傳詳情。如果不需要接收此訊息,需關閉此功能*/
        // request.setProgressListener(new PutObjectProgressListener());
        /* 設定應用ID*/
        //request.setAppId("app-1000000");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設定Proxy 伺服器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設定Proxy 伺服器連接埠 */
        //ossConfig.setProxyPort(-1);
        /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
        //ossConfig.setProxyPassword("<yourProxyPassword>");
        //request.setOssConfig(ossConfig);
        
        // 1.檔案流上傳
        // InputStream fileStream = getFileStream(request.getFileName());
        // if (fileStream != null) { 
        //     request.setInputStream(fileStream);
        // }
        // 2.網路流上傳
        String url = "http://test.aliyun.com/image/default/test.png";
        InputStream urlStream = getUrlStream(url);
        if (urlStream != null) {
            request.setInputStream(urlStream); 
       }
        // 開始上傳圖片
        UploadImageImpl uploadImage = new UploadImageImpl();
        UploadImageResponse response = uploadImage.upload(request);
        System.out.print("RequestId=" + response.getRequestId() + "\n");
        if (response.isSuccess()) {
            System.out.print("ImageId=" + response.getImageId() + "\n");
            System.out.print("ImageURL=" + response.getImageURL() + "\n");
        } else {
            System.out.print("ErrorCode=" + response.getCode() + "\n");
            System.out.print("ErrorMessage=" + response.getMessage() + "\n");
        }
    }
    private static InputStream getFileStream(String fileName) {
        try {
            return new FileInputStream(fileName);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
    private static InputStream getUrlStream(String url) {
        try {
            return new URL(url).openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}          

情境三:上傳輔助媒資

展開查看範例程式碼

public class UploadAttachedMediaDemo {
    // 帳號AK資訊請填寫(必選)
    // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
    // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
    // 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
    public static void main(String[] args) {
        // 輔助媒資上傳
        // 輔助媒資-本地檔案上傳
        testUploadAttachedMediaLocalFile(accessKeyId, accessKeySecret);
        // 輔助媒資-流式上傳(檔案流和網路流)
        testUploadAttachedMediaStream(accessKeyId, accessKeySecret);
    }
 /**
     * 輔助媒資上傳介面,本地檔案上傳樣本
     *
     * @param accessKeyId
     * @param accessKeySecret
     */
    private static void testUploadAttachedMediaLocalFile(String accessKeyId, String accessKeySecret) {
        /* 業務類型 */
        String businessType = "watermark";
        /* 副檔名 */
        String mediaExt = "png";
        String filename = "/Users/demo/png/test.png";
        UploadAttachedMediaRequest request = new UploadAttachedMediaRequest(accessKeyId, accessKeySecret, businessType, mediaExt);
        request.setFileName(filename);
        /* 標題*/
        request.setTitle("test_attached_media");
        /* 分類ID */
        request.setCateId(-1L);
        /* 標籤,多個用逗號分隔(可選) */
        request.setTags("tag1,tag2");
        /* 描述(可選) */
        request.setDescription("test_desc");
        /* 儲存地區(可選) */
        request.setStorageLocation("out-20170323225118266-5l3hs5****.oss-cn-shanghai.aliyuncs.com");
        /* 點播服務存取點 */
        request.setApiRegionId("cn-shanghai");
        /* 設定應用ID*/
        //request.setAppId("app-1000000");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設定Proxy 伺服器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設定Proxy 伺服器連接埠 */
        //ossConfig.setProxyPort(-1);
        /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
        //ossConfig.setProxyPassword("<yourProxyPassword>");
        //request.setOssConfig(ossConfig);
        
        UploadAttachedMediaImpl uploader = new UploadAttachedMediaImpl();
        UploadAttachedMediaResponse response = uploader.upload(request);
        System.out.print("RequestId=" + response.getRequestId() + "\n");
        if (response.isSuccess()) {
            System.out.print("MediaId=" + response.getMediaId() + "\n");
            System.out.print("MediaURL=" + response.getMediaURL() + "\n");
            System.out.print("FileURL=" + response.getFileURL() + "\n");
        } else {
            System.out.print("ErrorCode=" + response.getCode() + "\n");
            System.out.print("ErrorMessage=" + response.getMessage() + "\n");
        }
    }
     /**
     * 輔助媒資上傳介面,流式上傳樣本(支援檔案流和網路流)
     *
     * @param accessKeyId
     * @param accessKeySecret
     */
    private static void testUploadAttachedMediaStream(String accessKeyId, String accessKeySecret) {
        /* 業務類型 */

        String businessType = "watermark";

        /* 副檔名 */
        String mediaExt = "png";

        String filename = "http://test.aliyun.com/test.png";

        UploadAttachedMediaRequest request;
        // 1.檔案流上傳

        InputStream fileStream = getFileStream(filename);

        request = new UploadAttachedMediaRequest(accessKeyId, accessKeySecret, businessType, mediaExt);
        request.setInputStream(fileStream);


        // 2.網路流上傳

//        String url = "http://test.aliyun.com/image//test.png";

//        InputStream urlStream = getUrlStream(url);

//        request = new UploadAttachedMediaRequest(accessKeyId, accessKeySecret, businessType, mediaExt);
//        request.setInputStream(urlStream);

        /* 標題*/

        request.setTitle("test_attached_media");
        /* 分類ID */
        request.setCateId(-1L);
        /* 標籤,多個用逗號分隔(可選)*/
        request.setTags("tag1,tag2");

        /* 描述(可選)*/
        request.setDescription("test_desc");

        /* 儲存地區(可選)*/

        request.setStorageLocation("out-20170323225118266-5l3****wa.oss-cn-shanghai.aliyuncs.com");

        /* 點播服務存取點 */
        request.setApiRegionId("cn-shanghai");

        /* 設定應用ID*/

        // request.setAppId("app-1000000");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設定Proxy 伺服器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設定Proxy 伺服器連接埠 */
        //ossConfig.setProxyPort(-1);
        /* 設定串連OSS所使用的協議(HTTP或HTTPS),預設為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設定使用者代理程式,指HTTP的User-Agent頭,預設為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設定Proxy 伺服器驗證的使用者名稱,https協議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設定Proxy 伺服器驗證的密碼,https協議時需要填 */
        //ossConfig.setProxyPassword("<yourProxyPassword>");
        //request.setOssConfig(ossConfig);

        // 開始上傳

        UploadAttachedMediaImpl uploader = new UploadAttachedMediaImpl();

        UploadAttachedMediaResponse response = uploader.upload(request);
        System.out.print("RequestId=" + response.getRequestId() + "\n");
        if (response.isSuccess()) {

            System.out.print("MediaId=" + response.getMediaId() + "\n");

            System.out.print("MediaURL=" + response.getMediaURL() + "\n");

            System.out.print("FileURL=" + response.getFileURL() + "\n");
        } else {

            System.out.print("ErrorCode=" + response.getCode() + "\n");

            System.out.print("ErrorMessage=" + response.getMessage() + "\n");

        }

    }
    private static InputStream getFileStream(String fileName) {
        try {
            return new FileInputStream(fileName);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
    private static InputStream getUrlStream(String url) {
        try {
            return new URL(url).openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

進階功能

  • 上傳進度條

    sample目錄下的PutObjectProgressListener.java檔案,為上傳進度回呼函數範例程式碼。

    該類必須繼承VoDProgressListener類,ProgressEvent是通過OSS上傳檔案時產生的進度回調通知,您可以自訂各個事件通知的業務處理邏輯

    範例程式碼如下所示。

    展開查看範例程式碼

    /**
     * 上傳進度回調方法類
     * 當您開啟上傳進度回調時該事件回調才會生效。
     * OSS分區上傳成功或失敗均觸發相應的回調事件,您可根據商務邏輯處理相應的事件回調。
     * 當建立音視頻資訊成功後,此上傳進度回調中的videoId為本次上傳產生的視頻ID,您可以根據視頻ID進行音視頻管理。
     * 當建立圖片資訊成功後,此上傳進度回調中的ImageId為本次上傳產生的圖片ID,您可以根據視頻ID進行圖片管理。
     */
    
    public class PutObjectProgressListener implements VoDProgressListener {
        /**
         * 已成功上傳至OSS的位元組數
         */
        private long bytesWritten = 0;
        /**
         * 原始檔案的總位元組數
         */
        private long totalBytes = -1;
        /**
         * 本次上傳成功標記
         */
        private boolean succeed = false;
        /**
         * 視頻ID
         */
        private String videoId;
        /**
         * 圖片ID
         */
        private String imageId;
    
        public void progressChanged(ProgressEvent progressEvent) {
            long bytes = progressEvent.getBytes();
            ProgressEventType eventType = progressEvent.getEventType();
            switch (eventType) {
                //開始上傳事件
                case TRANSFER_STARTED_EVENT:
                    if (videoId != null) {
                        System.out.println("Start to upload videoId "+videoId+"......");
                    }
                    if (imageId != null) {
                        System.out.println("Start to upload imageId "+imageId+"......");
                    }
                    break;
                //計算待上傳檔案總大小事件通知,只有調用本地檔案方式上傳時支援該事件
                case REQUEST_CONTENT_LENGTH_EVENT:
                    this.totalBytes = bytes;
                    System.out.println(this.totalBytes + "bytes in total will be uploaded to OSS.");
                    break;
                //已經上傳成功檔案大小事件通知
                case REQUEST_BYTE_TRANSFER_EVENT:
                    this.bytesWritten += bytes;
                    if (this.totalBytes != -1) {
                        int percent = (int) (this.bytesWritten * 100.0 / this.totalBytes);
                        System.out.println(bytes+" bytes have been written at this time, upload progress: "+
                                percent +"%(" +  this.bytesWritten +  "/"  + this.totalBytes  + ")");
                    } else {
                        System.out.println(bytes + " bytes have been written at this time, upload sub total : " +
                                "(" + this.bytesWritten + ")");
                    }
                    break;
                //檔案全部上傳成功事件通知
                case TRANSFER_COMPLETED_EVENT:
                    this.succeed = true;
                    if (videoId != null) {
                        System.out.println("Succeed to upload videoId "  + videoId  + " , " + this.bytesWritten + " bytes have been transferred in total.");
                    }
                    if (imageId != null) {
                        System.out.println("Succeed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred in total.");
                    }
                    break;
                //檔案上傳失敗事件通知
                case TRANSFER_FAILED_EVENT:
                    if (videoId != null) {
                        System.out.println("Failed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred.");
                    }
                    if (imageId != null) {
                        System.out.println("Failed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred.");
                    }
                    break;
    
                default:
                    break;
            }
        }
    
        public boolean isSucceed() {
            return succeed;
        }
    
        public void onVidReady(String videoId) {
            setVideoId(videoId);
        }
    
        public void onImageIdReady(String imageId) {
            setImageId(imageId);
        }
    
        public String getVideoId() {
            return videoId;
        }
    
        public void setVideoId(String videoId) {
            this.videoId = videoId;
        }
    
        public String getImageId() {
            return imageId;
        }
    
        public void setImageId(String imageId) {
            this.imageId = imageId;
        }
    }
                        
  • 重新整理臨時Token

    sample目錄下的RefreshSTSTokenImpl.java檔案,為重新整理臨時Token的範例程式碼。

    樣本如下所示。

    展開查看範例程式碼

    /**
     * @author vod
     * 產生STS資訊實作類別
     * @date 2019/6/5
     */
    public class RefreshSTSTokenImpl implements VoDRefreshSTSTokenListener {
    
        public STSTokenDTO onRefreshSTSToken() {
            STSTokenDTO stsTokenDTO = new STSTokenDTO();
            stsTokenDTO.setAccessKeyId("<your sts AccessKeyId>");
            stsTokenDTO.setAccessKeySecret("<your sts AccessKeySecret>");
            stsTokenDTO.setSecurityToken("<your sts SecurityToken>");
            return stsTokenDTO;
        }
    
    }

常見問題

問題一:由於開發環境的不同,您可能會遇到找不到相關依賴等問題。此類問題通常是IDEA環境編譯問題導致,如果確定已經匯入所需的資源套件,您可以嘗試以下解決辦法。

  1. 在Maven專案中,單擊右側Maven,單擊m表徵圖,輸入mvn idea:module重新載入資源。module

  2. 在上方功能表列,選擇Build > Rebuild Project重新編輯您的工程。Rebuild

  3. aliyun-java-vod-upload-1.4.15.jar包拷貝到工程的resource目錄下,Maven依賴中增加本地依賴,依賴項內容如下:問題

    <dependency>
            <groupId>com.aliyun.vod</groupId>
            <artifactId>upload</artifactId>
            <version>1.4.15</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath>
    </dependency>

    添加完成後Maven依賴樣本

       <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>
         <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-vod</artifactId>
            <version>2.16.11</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68.noneautotype</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20170516</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.vod</groupId>
            <artifactId>upload</artifactId>
            <version>1.4.15</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath>
        </dependency>

相關文檔

媒體上傳概述

STS SDK概覽

Demo體驗