日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Java SDK上傳文件

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

整體說明

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

  1. 完成前提條件。詳細信息請參見前提條件

  2. 集成Java上傳SDK。詳細信息請參見集成Java上傳SDK

  3. 實現(xiàn)上傳邏輯(主要是上傳信息配置)。

前提條件

  • 您已經(jīng)開通了視頻點播服務(wù)。開通步驟請參見開通視頻點播服務(wù)

  • 您已經(jīng)完成上傳相關(guān)的系統(tǒng)配置,包括啟用目標存儲地域的存儲地址和配置回調(diào)。操作指引請參見管理存儲Bucket回調(diào)設(shè)置

  • 您已準備好用于調(diào)用點播服務(wù)的賬號。為避免阿里云賬號AccessKey泄露帶來的安全風(fēng)險,推薦您創(chuàng)建RAM用戶并授予其VOD相關(guān)權(quán)限。然后使用RAM用戶的AK對(AccessKey ID和AccessKey Secret)訪問點播服務(wù)。操作指引請參見創(chuàng)建RAM用戶并授權(quán)

  • 已配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統(tǒng)配置環(huán)境變量

    重要
    • 阿里云賬號的AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶的AccessKey進行API訪問或日常運維。

    • 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。

  • (可選)如需使用STS臨時授權(quán)方式(阿里云Security Token Service)訪問點播服務(wù),請為RAM用戶創(chuàng)建角色并授予角色VOD相關(guān)權(quán)限。操作指引請參見使用STS臨時授權(quán)方案上傳視頻

    說明

    STS臨時授權(quán)方式的適用場景請參見憑證方式與STS方式對比

集成Java上傳SDK

說明

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

  1. 下載Java上傳SDK及示例代碼。

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

    • 完整的上傳示例代碼,請參見Java上傳SDK解壓目錄中的sample/UploadVideoDemo.java文件。

  2. 解壓Java上傳SDK及示例代碼文件。

    以最新版本VODUploadDemo-java-1.4.15.zip為例,解壓后的文件如下:

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

    • sample:存放Java上傳SDK的示例代碼。

  3. 引入Jar包。

    • 如果您在Eclipse環(huán)境集成:在Eclipse中右擊您的工程,選擇Properties > Java Build Path > Add JARs。找到解壓后的VODUploadDemo-java-1.4.15文件,并將lib目錄下的所有jar文件添加到您的項目中。

    • 如果您在IntelliJ IDEA集成:在IntelliJ IDEA中打開您的工程,選擇File > Project Structure > Modules,單擊右側(cè)Dependencies,然后單擊+,再單擊JARs or directories。找到解壓后的VODUploadDemo-java-1.4.15文件,并將lib目錄下的所有jar文件添加到您的項目中。

    重要

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

  4. 添加阿里云Java SDK、OSS SDK、視頻點播服務(wù)端SDK、視頻點播服務(wù)端上傳SDK等依賴。

    重要
    • 以上依賴必須全部導(dǎo)入,否則會導(dǎo)致集成失敗。

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

    • 目前視頻點播已在中國內(nèi)地發(fā)布的區(qū)域有上海、深圳、北京。若使用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>
                            

場景一:上傳音視頻

普通音視頻文件

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

  • 上傳本地文件,使用分片上傳,并支持斷點續(xù)傳。請參見示例代碼中的testUploadVideo函數(shù)。

    • 當斷點續(xù)傳關(guān)閉時,最大支持上傳任務(wù)執(zhí)行時間為3000秒,具體可上傳文件大小與您的網(wǎng)絡(luò)帶寬及磁盤讀寫能力有關(guān)。

    • 當斷點續(xù)傳開啟時,最大支持48.8 TB的單個文件。

      重要

      斷點續(xù)傳開啟后,上傳任務(wù)執(zhí)行過程中,同時會將當前上傳位置寫入本地磁盤文件,影響您上傳文件的速度,請您根據(jù)文件大小選擇是否開啟。

  • 上傳網(wǎng)絡(luò)流,可指定文件URL進行上傳,支持斷點續(xù)傳,最大支持48.8 TB的單個文件。該上傳方式需要先將網(wǎng)絡(luò)文件下載到本地磁盤,再進行上傳,所以要保證本地磁盤有充足的空間。請參見示例代碼中的testUploadURLStream函數(shù)。

  • 上傳文件流,可指定本地文件進行上傳,不支持斷點續(xù)傳,最大支持5 GB的單個文件。請參見示例代碼中的testUploadFileStream函數(shù)。

  • 流式上傳,可指定輸入流進行上傳,支持文件流和網(wǎng)絡(luò)流等,不支持斷點續(xù)傳,最大支持5 GB的單個文件。請參見示例代碼中的testUploadStream函數(shù)。

重要

在使用示例代碼時,需要手動引入對應(yīng)的類。解決執(zhí)行代碼過程中出現(xiàn)找不到相關(guān)依賴等問題,請參見常見問題

展開查看示例代碼

public class UploadVideoDemo {
    // 賬號AK信息請?zhí)顚懀ū剡x)
    // 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進行API訪問或日常運維。
    // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
    // 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量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.網(wǎng)絡(luò)流上傳時,文件名稱為源文件名,如文件名稱.mp4(必選)。
    // 3.流式上傳時,文件名稱為源文件名,如文件名稱.mp4(必選)。
    // 任何上傳方式文件名必須包含擴展名
    String fileName = "/Users/test/video/test.mp4";
    // 本地文件上傳
    testUploadVideo(accessKeyId, accessKeySecret, title, fileName);

    // 待上傳視頻的網(wǎng)絡(luò)流地址
    String url = "http://test.aliyun.com/video/test.mp4";

    // 2.網(wǎng)絡(luò)流上傳
    // 文件擴展名,當url中不包含擴展名時,需要設(shè)置該參數(shù)
    String fileExtension = "mp4";
    testUploadURLStream(accessKeyId, accessKeySecret, title, url, fileExtension);

    // 3.文件流上傳
    testUploadFileStream(accessKeyId, accessKeySecret, title, fileName);

    // 4.流式上傳,如文件流和網(wǎng)絡(luò)流
    InputStream inputStream = null;
    // 4.1 文件流
    try {
        inputStream = new FileInputStream(fileName);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    // 4.2 網(wǎng)絡(luò)流
    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字節(jié) */
    request.setPartSize(2 * 1024 * 1024L);
    /* 可指定分片上傳時的并發(fā)線程數(shù),默認為1,(注:該配置會占用服務(wù)器CPU資源,需根據(jù)服務(wù)器情況指定)*/
    request.setTaskNum(1);
    /* 是否開啟斷點續(xù)傳, 默認斷點續(xù)傳功能關(guān)閉。當網(wǎng)絡(luò)不穩(wěn)定或者程序崩潰時,再次發(fā)起相同上傳請求,可以繼續(xù)未完成的上傳任務(wù),適用于超時3000秒仍不能上傳完成的大文件。
    注意:斷點續(xù)傳開啟后,會在上傳過程中將上傳位置寫入本地磁盤文件,影響文件上傳速度,請您根據(jù)實際情況選擇是否開啟*/
    //request.setEnableCheckpoint(false);
    /* OSS慢請求日志打印超時時間,是指每個分片上傳時間超過該閾值時會打印debug日志,如果想屏蔽此日志,請調(diào)整該閾值。單位:毫秒,默認為300000毫秒*/
    //request.setSlowRequestsThreshold(300000L);
    /* 可指定每個分片慢請求時打印日志的時間閾值,默認為300s*/
    //request.setSlowRequestsThreshold(300000L);
    /* 是否顯示水印(可選),指定模板組ID時,根據(jù)模板組配置確定是否顯示水印*/
    //request.setIsShowWaterMark(true);
    /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選), Extend為自定義擴展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請開通后才能使用)*/
    //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****");
    /* 存儲區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認上傳進度回調(diào) */
    //request.setPrintProgress(false);
    /* 設(shè)置自定義上傳進度回調(diào)(必須繼承 VoDProgressListener)*/
    /*默認關(guān)閉。如果開啟了這個功能,上傳過程中服務(wù)端會在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設(shè)置您實現(xiàn)的生成STS信息的接口實現(xiàn)類*/
    // request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl());
    /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點播服務(wù)接入點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

    /* 配置代理訪問(可選) */
    //OSSConfig ossConfig = new OSSConfig();
    /* <必填>設(shè)置代理服務(wù)器主機地址 */
    //ossConfig.setProxyHost("<yourProxyHost>");
    /* <必填>設(shè)置代理服務(wù)器端口 */
    //ossConfig.setProxyPort(-1);
    /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
    //ossConfig.setProtocol("HTTP");
    /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
    //ossConfig.setUserAgent("<yourUserAgent>");
    /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
    //ossConfig.setProxyUsername("<yourProxyUserName>");
    /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
    //ossConfig.setProxyPassword("<yourProxyPassword>");
    //request.setOssConfig(ossConfig);

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

/**
 * URL網(wǎng)絡(luò)流上傳。支持斷點續(xù)傳,最大支持48.8TB的單個文件。
 * 該上傳方式需要先將網(wǎng)絡(luò)文件下載到本地磁盤,再進行上傳,所以要保證本地磁盤有充足的空間。
 * 當您設(shè)置的URL中不包括文件擴展名時,需要單獨設(shè)置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);
    /* 網(wǎng)絡(luò)文件下載連接超時,單位毫秒,0-表示不限制*/
    request.setDownloadConnectTimeout(1000);
    /* 網(wǎng)絡(luò)文件下載讀取超時,單位毫秒,0-表示不限制*/
    request.setDownloadReadTimeout(0);
    /* 網(wǎng)絡(luò)文件下載后保存的本地目錄*/
    request.setLocalDownloadFilePath("/Users/download");
    /* 是否顯示水印(可選),指定模板組ID時,根據(jù)模板組配置確定是否顯示水印*/
    //request.setShowWaterMark(true);
    /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選),Extend為自定義擴展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請開通后才能使用) */
    //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****");
    /* 存儲區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認上傳進度回調(diào) */
    //request.setPrintProgress(true);
    /* 設(shè)置自定義上傳進度回調(diào) (必須繼承 VoDProgressListener)*/
    /*默認關(guān)閉。如果開啟了這個功能,上傳過程中服務(wù)端會在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點播服務(wù)接入點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理訪問(可選) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>設(shè)置代理服務(wù)器主機地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>設(shè)置代理服務(wù)器端口 */
     //ossConfig.setProxyPort(-1);
     /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadURLStreamResponse response = uploader.uploadURLStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //請求視頻點播服務(wù)的請求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果設(shè)置回調(diào)URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空,此時需要根據(jù)返回錯誤碼分析具體錯誤原因 */
        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時,根據(jù)模板組配置確定是否使用默認水印*/
    //request.setShowWaterMark(true);
    /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選),Extend為自定義擴展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請開通后才能使用)*/
    //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****");
    /* 存儲區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認上傳進度回調(diào) */
    //request.setPrintProgress(true);
    /* 設(shè)置自定義上傳進度回調(diào)(必須繼承 VoDProgressListener)*/
    /*默認關(guān)閉。如果開啟了這個功能,上傳過程中服務(wù)端會在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點播服務(wù)接入點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理訪問(可選) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>設(shè)置代理服務(wù)器主機地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>設(shè)置代理服務(wù)器端口 */
     //ossConfig.setProxyPort(-1);
     /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadFileStreamResponse response = uploader.uploadFileStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //請求視頻點播服務(wù)的請求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
        /* 如果設(shè)置回調(diào)URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空,此時需要根據(jù)返回錯誤碼分析具體錯誤原因 */
        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時,根據(jù)模板組配置確定是否使用默認水印*/
    //request.setShowWaterMark(true);
    /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選), Extend為自定義擴展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請開通后才能使用)*/
    //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****");
    /* 存儲區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認上傳進度回調(diào) */
    // request.setPrintProgress(true);
    /* 設(shè)置自定義上傳進度回調(diào)(必須繼承 VoDProgressListener) */
    /*默認關(guān)閉。如果開啟了這個功能,上傳過程中服務(wù)端會在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    // request.setProgressListener(new PutObjectProgressListener());
     /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點播服務(wù)接入點 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

     /* 配置代理訪問(可選) */
     //OSSConfig ossConfig = new OSSConfig();
     /* <必填>設(shè)置代理服務(wù)器主機地址 */
     //ossConfig.setProxyHost("<yourProxyHost>");
     /* <必填>設(shè)置代理服務(wù)器端口 */
     //ossConfig.setProxyPort(-1);
     /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
     //ossConfig.setProtocol("HTTP");
     /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
     //ossConfig.setUserAgent("<yourUserAgent>");
     /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
     //ossConfig.setProxyUsername("<yourProxyUserName>");
     /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
     //ossConfig.setProxyPassword("<yourProxyPassword>");
     //request.setOssConfig(ossConfig);
        
    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadStreamResponse response = uploader.uploadStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n");  //請求視頻點播服務(wù)的請求ID
    if (response.isSuccess()) {
        System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else { //如果設(shè)置回調(diào)URL無效,不影響視頻上傳,可以返回VideoId同時會返回錯誤碼。其他情況上傳失敗時,VideoId為空,此時需要根據(jù)返回錯誤碼分析具體錯誤原因
        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信息請?zhí)顚懀ū剡x)
    // 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進行API訪問或日常運維。
    // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
    // 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量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.上傳網(wǎng)絡(luò)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字節(jié) */
        request.setPartSize(2 * 1024 * 1024L);
        /* 可指定分片上傳時的并發(fā)線程數(shù),默認為1,(注:該配置會占用服務(wù)器CPU資源,需根據(jù)服務(wù)器情況指定)*/
        request.setTaskNum(1);
        /* 是否顯示水印(可選),指定模板組ID時,根據(jù)模板組配置確定是否顯示水印*/
        //request.setShowWaterMark(true);
        /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選),Extend為自定義擴展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請開通后才能使用)*/
        //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****");
        /* 存儲區(qū)域(可選)*/
        //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
        /* 設(shè)置應(yīng)用ID*/
        // request.setAppId("app-1000000");
        /* 點播服務(wù)接入點 */
        // request.setApiRegionId("cn-shanghai");
        /* ECS部署區(qū)域*/
        // request.setEcsRegionId("cn-shanghai");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設(shè)置代理服務(wù)器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設(shè)置代理服務(wù)器端口 */
        //ossConfig.setProxyPort(-1);
        /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
        //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());
    }

    /**
     * 上傳網(wǎng)絡(luò)m3u8視頻或音頻文件到點播,需本地磁盤空間足夠,會先下載到本地臨時目錄,再上傳到點播存儲
     *
     * @param request 網(wǎng)絡(luò)m3u8上傳請求類
     *                m3u8FileURL: 網(wǎng)絡(luò)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字節(jié) */
        request.setPartSize(2 * 1024 * 1024L);
        /* 可指定分片上傳時的并發(fā)線程數(shù),默認為1,(注:該配置會占用服務(wù)器CPU資源,需根據(jù)服務(wù)器情況指定)*/
        request.setTaskNum(1);
        /* 是否顯示水印(可選),指定模板組ID時,根據(jù)模板組配置確定是否顯示水印*/
        //request.setShowWaterMark(true);
        /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選),Extend為自定義擴展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請開通后才能使用)*/
        //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****");
        /* 存儲區(qū)域(可選)*/
        //request.setStorageLocation("in-2017032321****-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
        /* 設(shè)置應(yīng)用ID*/
        //request.setAppId("app-100****");
        /* 點播服務(wù)接入點 */
        //request.setApiRegionId("cn-shanghai");
        /* ECS部署區(qū)域*/
        // request.setEcsRegionId("cn-shanghai");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設(shè)置代理服務(wù)器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設(shè)置代理服務(wù)器端口 */
        //ossConfig.setProxyPort(-1);
        /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
        //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信息請?zhí)顚懀ū剡x)
    // 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進行API訪問或日常運維。
    // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
    // 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量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.圖片上傳-流式上傳(文件流和網(wǎng)絡(luò)流)
         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個字節(jié),UTF8編碼 */
        //request.setTitle("圖片標題");
        /* 圖片標簽(可選)單個標簽不超過32字節(jié),最多不超過16個標簽,多個用逗號分隔,UTF8編碼 */
        //request.setTags("標簽1,標簽2");
        /* 存儲區(qū)域(可選)*/
        //request.setStorageLocation("out-4f3952f78c0211e8b30200****.oss-cn-shanghai.aliyuncs.com");
        /* 流式上傳時,InputStream為必選,fileName為源文件名稱,如:文件名稱.png(可選)*/
        String fileName = "/Users/demo/png/test.png";
        request.setFileName(fileName);
        /* 開啟默認上傳進度回調(diào) */
        //request.setPrintProgress(false);
        /* 設(shè)置自定義上傳進度回調(diào) (必須繼承 VoDProgressListener)*/
        /*默認關(guān)閉。如果開啟了這個功能,上傳過程中服務(wù)端會在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
        // request.setProgressListener(new PutObjectProgressListener());
        /* 設(shè)置應(yīng)用ID*/
        //request.setAppId("app-100****");
        /* 點播服務(wù)接入點 */
        //request.setApiRegionId("cn-shanghai");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設(shè)置代理服務(wù)器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設(shè)置代理服務(wù)器端口 */
        //ossConfig.setProxyPort(-1);
        /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
        //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");
        }
    }
    /**
     * 圖片上傳接口,流式上傳示例(支持文件流和網(wǎng)絡(luò)流)
     *
     * @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個字節(jié),UTF8編碼 */
        //request.setTitle("圖片標題");
        /* 圖片標簽(可選)單個標簽不超過32字節(jié),最多不超過16個標簽,多個用逗號分隔,UTF8編碼 */
        //request.setTags("標簽1,標簽2");
        /* 存儲區(qū)域(可選)*/
        //request.setStorageLocation("out-4f3952f78c0211e8b30200****.oss-cn-shanghai.aliyuncs.com");
        /* 流式上傳時,InputStream為必選,fileName為源文件名稱,如:文件名稱.png(可選)*/
        //request.setFileName("測試文件名稱.png");
        /* 開啟默認上傳進度回調(diào) */
        // request.setPrintProgress(true);
        /* 設(shè)置自定義上傳進度回調(diào) (必須繼承 VoDProgressListener) */
        /*默認關(guān)閉。如果開啟了這個功能,上傳過程中服務(wù)端會在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
        // request.setProgressListener(new PutObjectProgressListener());
        /* 設(shè)置應(yīng)用ID*/
        //request.setAppId("app-1000000");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設(shè)置代理服務(wù)器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設(shè)置代理服務(wù)器端口 */
        //ossConfig.setProxyPort(-1);
        /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
        //ossConfig.setProxyPassword("<yourProxyPassword>");
        //request.setOssConfig(ossConfig);
        
        // 1.文件流上傳
        // InputStream fileStream = getFileStream(request.getFileName());
        // if (fileStream != null) { 
        //     request.setInputStream(fileStream);
        // }
        // 2.網(wǎng)絡(luò)流上傳
        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信息請?zhí)顚懀ū剡x)
    // 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進行API訪問或日常運維。
    // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
    // 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。運行代碼示例前,請配置環(huán)境變量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);
        // 輔助媒資-流式上傳(文件流和網(wǎng)絡(luò)流)
        testUploadAttachedMediaStream(accessKeyId, accessKeySecret);
    }
 /**
     * 輔助媒資上傳接口,本地文件上傳示例
     *
     * @param accessKeyId
     * @param accessKeySecret
     */
    private static void testUploadAttachedMediaLocalFile(String accessKeyId, String accessKeySecret) {
        /* 業(yè)務(wù)類型 */
        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");
        /* 存儲區(qū)域(可選) */
        request.setStorageLocation("out-20170323225118266-5l3hs5****.oss-cn-shanghai.aliyuncs.com");
        /* 點播服務(wù)接入點 */
        request.setApiRegionId("cn-shanghai");
        /* 設(shè)置應(yīng)用ID*/
        //request.setAppId("app-1000000");

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設(shè)置代理服務(wù)器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設(shè)置代理服務(wù)器端口 */
        //ossConfig.setProxyPort(-1);
        /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
        //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");
        }
    }
     /**
     * 輔助媒資上傳接口,流式上傳示例(支持文件流和網(wǎng)絡(luò)流)
     *
     * @param accessKeyId
     * @param accessKeySecret
     */
    private static void testUploadAttachedMediaStream(String accessKeyId, String accessKeySecret) {
        /* 業(yè)務(wù)類型 */

        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.網(wǎng)絡(luò)流上傳

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

        /* 存儲區(qū)域(可選)*/

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

        /* 點播服務(wù)接入點 */
        request.setApiRegionId("cn-shanghai");

        /* 設(shè)置應(yīng)用ID*/

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

        /* 配置代理訪問(可選) */
        //OSSConfig ossConfig = new OSSConfig();
        /* <必填>設(shè)置代理服務(wù)器主機地址 */
        //ossConfig.setProxyHost("<yourProxyHost>");
        /* <必填>設(shè)置代理服務(wù)器端口 */
        //ossConfig.setProxyPort(-1);
        /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認為HTTP */
        //ossConfig.setProtocol("HTTP");
        /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認為aliyun-sdk-java */
        //ossConfig.setUserAgent("<yourUserAgent>");
        /* 設(shè)置代理服務(wù)器驗證的用戶名,https協(xié)議時需要填 */
        //ossConfig.setProxyUsername("<yourProxyUserName>");
        /* 設(shè)置代理服務(wù)器驗證的密碼,https協(xié)議時需要填 */
        //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文件,為上傳進度回調(diào)函數(shù)示例代碼。

    該類必須繼承VoDProgressListener類,ProgressEvent是通過OSS上傳文件時產(chǎn)生的進度回調(diào)通知,您可以自定義各個事件通知的業(yè)務(wù)處理邏輯

    示例代碼如下所示。

    展開查看示例代碼

    /**
     * 上傳進度回調(diào)方法類
     * 當您開啟上傳進度回調(diào)時該事件回調(diào)才會生效。
     * OSS分片上傳成功或失敗均觸發(fā)相應(yīng)的回調(diào)事件,您可根據(jù)業(yè)務(wù)邏輯處理相應(yīng)的事件回調(diào)。
     * 當創(chuàng)建音視頻信息成功后,此上傳進度回調(diào)中的videoId為本次上傳生成的視頻ID,您可以根據(jù)視頻ID進行音視頻管理。
     * 當創(chuàng)建圖片信息成功后,此上傳進度回調(diào)中的ImageId為本次上傳生成的圖片ID,您可以根據(jù)視頻ID進行圖片管理。
     */
    
    public class PutObjectProgressListener implements VoDProgressListener {
        /**
         * 已成功上傳至OSS的字節(jié)數(shù)
         */
        private long bytesWritten = 0;
        /**
         * 原始文件的總字節(jié)數(shù)
         */
        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;
                //計算待上傳文件總大小事件通知,只有調(diào)用本地文件方式上傳時支持該事件
                case REQUEST_CONTENT_LENGTH_EVENT:
                    this.totalBytes = bytes;
                    System.out.println(this.totalBytes + "bytes in total will be uploaded to OSS.");
                    break;
                //已經(jīng)上傳成功文件大小事件通知
                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信息實現(xiàn)類
     * @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;
        }
    
    }

常見問題

問題一:由于開發(fā)環(huán)境的不同,您可能會遇到找不到相關(guān)依賴等問題。此類問題通常是IDEA環(huán)境編譯問題導(dǎo)致,如果確定已經(jīng)導(dǎo)入所需的資源包,您可以嘗試以下解決辦法。

  1. 在Maven項目中,單擊右側(cè)Maven,單擊m圖標,輸入mvn idea:module重新加載資源。module

  2. 在上方菜單欄,選擇Build > Rebuild Project重新編輯您的工程。Rebuild

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

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

相關(guān)文檔

媒體上傳概述

STS SDK概覽

Demo體驗