本文通過樣本詳細介紹如何使用服務端上傳SDK(Java語言)將各類媒體檔案上傳至點播儲存。
整體說明
從內部邏輯角度看,Java上傳SDK遵循點播服務端SDK的通用流程。詳情請參見上傳流程。從操作角度看,使用Java上傳SDK的基礎流程如下:
完成前提條件。詳細資料請參見前提條件。
整合Java上傳SDK。詳細資料請參見整合Java上傳SDK。
實現上傳邏輯(主要是上傳資訊配置)。
音視頻上傳請參見情境一:上傳音視頻。
圖片上傳請參見情境二:上傳圖片。
輔助媒資上傳請參見情境三:上傳輔助媒資。
更多進階功能請參見進階功能。
前提條件
您已經開通了ApsaraVideo for VOD服務。開通步驟請參見開通ApsaraVideo for VOD服務。
您已經完成上傳相關的系統配置,包括啟用目標儲存地區的儲存地址和配置回調。操作指引請參見管理儲存Bucket及回調設定。
您已準備好用於調用點播服務的帳號。為避免阿里雲帳號AccessKey泄露帶來的安全風險,推薦您建立RAM使用者並授予其VOD相關許可權。然後使用RAM使用者的AK對(AccessKey ID和AccessKey Secret)訪問點播服務。操作指引請參見建立RAM使用者並授權。
已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_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包。如果整合遇到問題,請參見常見問題排查。
下載Java上傳SDK及範例程式碼。
說明最新版本的下載地址請參見上傳SDK。歷史版本功能請參見Java上傳SDK發布歷史。
完整的上傳範例程式碼,請參見Java上傳SDK解壓目錄中的sample/UploadVideoDemo.java檔案。
解壓Java上傳SDK及範例程式碼檔案。
以最新版本VODUploadDemo-java-1.4.15.zip為例,解壓後的檔案如下:
lib
:存放Java上傳SDK所需要的jar包。sample
:存放Java上傳SDK的範例程式碼。
引入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包後仍然需要配置依賴。
添加阿里雲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環境編譯問題導致,如果確定已經匯入所需的資源套件,您可以嘗試以下解決辦法。
在Maven專案中,單擊右側Maven,單擊m表徵圖,輸入
mvn idea:module
重新載入資源。在上方功能表列,選擇Build > Rebuild Project重新編輯您的工程。
將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>