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");
// 如果ECS部署地區和點播服務存取點地區相同,則自動啟用內網上傳
/* 配置代理訪問(可選) */
//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");
// 如果ECS部署地區和點播服務存取點地區相同,則自動啟用內網上傳
/* 配置代理訪問(可選) */
//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");
// 如果ECS部署地區和點播服務存取點地區相同,則自動啟用內網上傳
/* 配置代理訪問(可選) */
//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");
// 如果ECS部署地區和點播服務存取點地區相同,則自動啟用內網上傳
/* 配置代理訪問(可選) */
//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");
}
}
}