vodpro-upload-js-sdk
Version:
Tencent Cloud VOD Pro Upload SDK
244 lines (192 loc) • 7.64 kB
Markdown
## 注意事项
由 core1发起的上传,无法使用 core2来访问和操作
const core1 = new Core({ ... });
const core2 = new Core({ ... });
taskId由core1返回
core2.pauseTask(taskId); // 暂停无效,core2实例无法操作 core1的队列
## 用法
### 前置条件:客户开通云点播专业版应用及对应地域存储桶。
### 服务端 Java Demo
```
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.vod.v20240718.VodClient;
import com.tencentcloudapi.vod.v20240718.models.CreateStorageCredentialsRequest;
import com.tencentcloudapi.vod.v20240718.models.CreateStorageCredentialsResponse;
import org.json.JSONArray;
import org.json.JSONObject;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* 凭证辅助类,负责获取临时存储凭证
*/
public class CredentialHelper {
// 常量定义
private static final long APP_ID = 251000000; // 腾讯云账号 APPID
private static final long SUB_APP_ID = 1234567890; // 云点播专业版应用 APPID
private static final String BUCKET_ID = "bucketid1"; // 云点播专业版应用存储桶的 ID
private static final String FILE_KEY = "upload/demo.mp4"; // 上传到存储后的文件 KEY
private static final String REGION = "ap-guangzhou"; // 存储桶所在地域
/**
* 凭证对象,存储临时凭证信息
*/
public static class Cred {
private final String accessKeyId;
private final String secretAccessKey;
private final String sessionToken;
public Cred(String accessKeyId, String secretAccessKey, String sessionToken) {
this.accessKeyId = accessKeyId;
this.secretAccessKey = secretAccessKey;
this.sessionToken = sessionToken;
}
public String getAccessKeyId() {
return accessKeyId;
}
public String getSecretAccessKey() {
return secretAccessKey;
}
public String getSessionToken() {
return sessionToken;
}
}
/**
* 获取临时凭证
*
* @return 临时凭证对象
* @throws Exception 如果获取凭证失败
*/
public static Cred getCredential() throws Exception {
try {
// 1. 初始化腾讯云 API 客户端
Credential credential = new Credential("SecretId", "SecretKey"); // 腾讯云账号 SecretId 和 SecretKey
ClientProfile clientProfile = new ClientProfile(); // 客户端配置
VodClient vodClient = new VodClient(credential, "ap-guangzhou", clientProfile); // 创建 VodClient 对象
// 2. 构造并编码策略
String policyJson = createPolicyJson();
String encodedPolicy = URLEncoder.encode(policyJson, StandardCharsets.UTF_8.name());
// 3. 创建并发送请求
CreateStorageCredentialsRequest req = new CreateStorageCredentialsRequest();
req.setSubAppId(SUB_APP_ID); // 云点播专业版应用 APPID
req.setPolicy(encodedPolicy); // 策略
// 4. 获取响应并返回凭证
CreateStorageCredentialsResponse resp = vodClient.CreateStorageCredentials(req);
System.out.println("获取存储凭证成功: " + resp);
return new Cred(
resp.getCredentials().getAccessKeyId(),
resp.getCredentials().getSecretAccessKey(),
resp.getCredentials().getSessionToken());
} catch (TencentCloudSDKException e) {
System.err.println("获取存储凭证失败: " + e.getMessage());
throw new Exception("获取存储凭证失败", e);
}
}
/**
* 创建策略JSON字符串,使用 org.json 库
*
* @return 策略JSON字符串
*/
private static String createPolicyJson() {
// 构建资源路径
String resource = String.format(
"qcs::vod:%s:uid/%d:prefix//%d/%s/%s",
REGION,
APP_ID,
SUB_APP_ID,
BUCKET_ID,
FILE_KEY);
// 构建操作列表
String[] actions = {
"name/vod:PutObject",
"name/vod:ListParts",
"name/vod:PostObject",
"name/vod:CreateMultipartUpload",
"name/vod:UploadPart",
"name/vod:CompleteMultipartUpload",
"name/vod:AbortMultipartUpload",
"name/vod:ListMultipartUploads"
};
// 使用 JSONObject 构建 JSON
JSONObject policy = new JSONObject();
policy.put("version", "2.0");
JSONArray statements = new JSONArray();
JSONObject statement = new JSONObject();
JSONArray actionArray = new JSONArray();
for (String action : actions) {
actionArray.put(action);
}
statement.put("action", actionArray);
statement.put("effect", "allow");
JSONArray resources = new JSONArray();
resources.put(resource);
statement.put("resource", resources);
statements.put(statement);
policy.put("statement", statements);
return policy.toString();
}
}
```
### pom.xml
```
<repositories>
<repository>
<id>tencentcloud-repo</id>
<name>Tencent Cloud Repository</name>
<url>https://mirrors.tencent.com/nexus/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<!-- AWS SDK for Java 2.0 -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- Replace Apache HTTP client with Netty for async operations -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>netty-nio-client</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- S3 Transfer Manager -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-transfer-manager</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- SDK Core -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sdk-core</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- Checksums -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>checksums</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- Tencent Cloud SDK -->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-vod</artifactId>
<version>${tencentcloud.version}</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-common</artifactId>
<version>${tencentcloud.version}</version>
</dependency>
<!-- JSON Library -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230227</version>
</dependency>
</dependencies>
```
### 前端上传示例请参考路径demo下的演示
```
npm i
nmm run start
```