存储访问方式

最近更新时间:2025-03-14 11:57:23

我的收藏
本文主要介绍专业版应用支持的存储访问方式和这些访问方式的使用方法。
说明:
控制台访问方式请参见 控制台指南,腾讯云 API3.0 访问方式请参见 服务端 API 文档,这两种方式本文不再重复介绍。

访问方式

专业版应用支持的存储访问方式如下:
类型
访问方式
访问域名
作用
预置域名
存储桶公网域名
[BucketId].vodpro.[存储地域].eovod.com
用于公网对媒体文件进行增删改查。
存储桶内网域名
[BucketId].vodsrc-internal.[存储地域].eovod.com
用于在腾讯云内网同地域对媒体文件进行增删查改,支持下载且不产生流量费用。
自定义域名
EdgeOne 加速分发域名
客户自定义
用于媒体文件的分发播放。

使用方法

存储桶公网域名

专业版应用为每个存储桶预置了一个公网域名,客户可使用该域名对存储桶内的媒体文件进行增删改查。具体支持的操作清单请参见文档 支持的存储操作
注意:
存储桶公网域名有一定的生效时间,一般在存储桶创建后 30 ~ 120 分钟生效。
存储桶公网域名不支持下载文件,如需下载或浏览文件内容请使用 Edgeone 加速域名

准备工作

1. 创建应用和存储桶。
云点播控制台创建好专业版应用和存储桶,具体操作步骤参见 快速入门创建存储桶 文档。
2. 获取密钥对。
从专业版应用的密钥管理中,获取密钥对AccessKeyIdSecretAccessKey,具体操作步骤参见 密钥管理 文档。

使用 S3 SDK 访问存储桶

下面介绍在常用的编程语言中,如何进行适配以访问专业版应用的存储桶。
假设存储地域为 ap-guangzhou,存储桶 ID 为 bucketid1,常用语言初始化 S3 客户端并获取对象元数据的代码实现如下所示:
GO
Java
C++
Python
import (
"context"
"errors"
"fmt"
"net/url"
"os"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
smep "github.com/aws/smithy-go/endpoints"
"github.com/aws/smithy-go/logging"
)

type customEndpointResolverV2 struct {
}

// ResolveEndpoint 自定义接入点
func (r *customEndpointResolverV2) ResolveEndpoint(ctx context.Context,
params s3.EndpointParameters) (smep.Endpoint, error) {
if params.Bucket == nil || params.Region == nil {
return smep.Endpoint{}, errors.New("invalid endpoint param")
}
return smep.Endpoint{
URI: url.URL{
Scheme: "https",
Host: fmt.Sprintf("%s.vodpro.%s.eovod.com", *params.Bucket, *params.Region),
},
}, nil
}

func main() {
// 初始化客户端
s3cli := s3.New(s3.Options{
Credentials: credentials.NewStaticCredentialsProvider(
"AccessKeyId", // 填入密钥对中的 AccessKeyId
"SecretAccessKey", // 填入密钥对中的 SecretAccessKey
""),
EndpointResolverV2: new(customEndpointResolverV2), // 自定义访问域名
UsePathStyle: false, // 请求禁用 path style
Logger: logging.NewStandardLogger(os.Stdout), // 日志打印到标准输出流
ClientLogMode: aws.LogRequest | aws.LogResponse, // 打印请求头和响应头
Region: "ap-guangzhou", // 存储地域
})
// 获取媒体文件的元数据
_, _ = s3cli.HeadObject(context.TODO(), &s3.HeadObjectInput{
Bucket: aws.String("bucketid1"), // Bucket 设置为点播专业版应用中的存储桶 ID
Key: aws.String("a/b/c.jpeg"), // 媒体文件在存储桶中的路径
})
}
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;

import java.net.URI;

public class Main {
// 自定义端点解析器
public static void main(String[] args) {
// 初始化 S3 客户端
S3Client s3Client = S3Client.builder()
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(
"AccessKeyId", // 填入密钥对中的 AccessKeyId
"SecretAccessKey" // 填入密钥对中的 SecretAccessKey
)))
.endpointOverride(URI.create("https://vodpro.ap-guangzhou.eovod.com"))
.region(Region.of("ap-guangzhou"))
.build();

// 获取媒体文件的元数据
try {
HeadObjectRequest headObjectRequest = HeadObjectRequest.builder()
.bucket("bucketid1") // Bucket 设置为点播专业版应用中的存储桶 ID
.key("a/b/c.jpeg") // 媒体文件在存储桶中的路径
.build();
HeadObjectResponse headObjectResponse = s3Client.headObject(headObjectRequest);
System.out.println("Content Length: " + headObjectResponse.contentLength());
} catch (Exception e) {
e.printStackTrace();
} finally {
s3Client.close();
}
}
}
#include <aws/core/Aws.h>
#include <aws/core/auth/AWSCredentials.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/HeadObjectRequest.h>
#include <iostream>
#include <string>

int main() {
// 初始化 AWS SDK
const Aws::SDKOptions options;
InitAPI(options);
// 自定义访问域名
Aws::Client::ClientConfiguration clientConfig;
clientConfig.scheme = Aws::Http::Scheme::HTTPS;
clientConfig.endpointOverride = "vodpro.ap-guangzhou.eovod.com";
// 创建 S3 客户端
const Aws::S3::S3Client s3Client(
Aws::Auth::AWSCredentials(
"AccessKeyId", // 填入密钥对中的 AccessKeyId
"SecretAccessKey" // 填入密钥对中的 SecretAccessKey
),
nullptr, clientConfig);
// 创建 HeadObject 请求
Aws::S3::Model::HeadObjectRequest request;
request.SetBucket("bucketid1"); // Bucket 设置为点播专业版应用中的存储桶 ID
request.SetKey("a/b/c.jpeg"); // 媒体文件在存储桶中的路径
// 发送请求
auto outcome = s3Client.HeadObject(request);
if (outcome.IsSuccess()) {
std::cout << "Head object succeeded!" << std::endl;
const auto &object = outcome.GetResult();
std::cout << "Content Length: " << object.GetContentLength() << std::endl;
} else {
const auto error = outcome.GetError();
std::cout << "Error: " << error.GetMessage() << std::endl;
}
// 清理 AWS SDK
Aws::ShutdownAPI(options);
return 0;
}
import boto3
from botocore.config import Config
from botocore.exceptions import ClientError


# 创建 S3 客户端
s3_client = boto3.client(
's3',
aws_access_key_id='AccessKeyId', # 填入密钥对中的 AccessKeyId
aws_secret_access_key='SecretAccessKey', # 填入密钥对中的 SecretAccessKey
endpoint_url='https://vodpro.ap-guangzhou.eovod.com', # 自定义访问域名
config=Config(s3={'addressing_style': 'virtual'}), # 使用 virtual hosted-style
)

try:
# 获取媒体文件的元数据
response = s3_client.head_object(
Bucket="bucketid1", # Bucket 设置为点播专业版应用中的存储桶 ID
Key="a/b/c.jpeg" # 媒体文件在存储桶中的路径
)
print(response)
except ClientError as e:
print(f"Error: {e}")

存储桶内网域名

专业版应用为每个存储桶预置了一个内网域名,客户可使用该域名在腾讯云相同地域的服务器通过内网对存储桶内的媒体文件进行增删改查,支持文件下载且不会产生流量费用,具体支持的操作清单请参见 支持的存储操作
注意:
存储桶内网域名有一定的生效时间,一般在存储桶创建后 30 ~ 120 分钟生效。
内网域名必须在与存储桶相同地域的腾讯云服务器上才能访问,否则会得到 404 响应码。可以尝试在服务器上使用 nslookups等指令进行域名解析,若得到形如 10.*.*.*100.*.*.*169.254.*.*等形式的 IP,则一般可以进行内网访问。

准备工作

1. 创建应用和存储桶。
云点播控制台 创建好专业版应用和存储桶,具体操作步骤参见 快速入门创建存储桶 文档。
2. 获取密钥对。
从专业版应用的密钥管理中,获取密钥对AccessKeyIdSecretAccessKey,具体操作步骤参见 密钥管理 文档。
3. 准备服务器。
准备好与存储桶相同地域的腾讯云服务器,如 云服务器轻量应用服务器容器服务 等。

使用 S3 SDK 访问存储桶

下面介绍在常用的编程语言中,如何进行适配以通过内网访问专业版应用的存储桶。
假设存储地域为ap-guangzhou,存储桶 ID 为bucketid1,常用语言初始化 S3 客户端并获取对象元数据的代码实现如下所示:
GO
Java
C++
Python
import (
"context"
"errors"
"fmt"
"net/url"
"os"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
smep "github.com/aws/smithy-go/endpoints"
"github.com/aws/smithy-go/logging"
)

type customEndpointResolverV2 struct {
}

// ResolveEndpoint 自定义接入点
func (r *customEndpointResolverV2) ResolveEndpoint(ctx context.Context,
params s3.EndpointParameters) (smep.Endpoint, error) {
if params.Bucket == nil || params.Region == nil {
return smep.Endpoint{}, errors.New("invalid endpoint param")
}
return smep.Endpoint{
URI: url.URL{
Scheme: "https",
Host: fmt.Sprintf("%s.vodsrc-internal.%s.eovod.com", *params.Bucket, *params.Region),
},
}, nil
}

func main() {
// 初始化客户端
s3cli := s3.New(s3.Options{
Credentials: credentials.NewStaticCredentialsProvider(
"AccessKeyId", // 填入密钥对中的 AccessKeyId
"SecretAccessKey", // 填入密钥对中的 SecretAccessKey
""),
EndpointResolverV2: new(customEndpointResolverV2), // 自定义访问域名
UsePathStyle: false, // 请求禁用 path style
Logger: logging.NewStandardLogger(os.Stdout), // 日志打印到标准输出流
ClientLogMode: aws.LogRequest | aws.LogResponse, // 打印请求头和响应头
Region: "ap-guangzhou", // 存储地域
})
// 获取媒体文件的元数据
_, _ = s3cli.HeadObject(context.TODO(), &s3.HeadObjectInput{
Bucket: aws.String("bucketid1"), // Bucket 设置为点播专业版应用中的存储桶 ID
Key: aws.String("a/b/c.jpeg"), // 媒体文件在存储桶中的路径
})
}
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;

import java.net.URI;

public class Main {
// 自定义端点解析器
public static void main(String[] args) {
// 初始化 S3 客户端
S3Client s3Client = S3Client.builder()
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(
"AccessKeyId", // 填入密钥对中的 AccessKeyId
"SecretAccessKey" // 填入密钥对中的 SecretAccessKey
)))
.endpointOverride(URI.create("https://vodsrc-internal.ap-guangzhou.eovod.com"))
.region(Region.of("ap-guangzhou"))
.build();

// 获取媒体文件的元数据
try {
HeadObjectRequest headObjectRequest = HeadObjectRequest.builder()
.bucket("bucketid1") // Bucket 设置为点播专业版应用中的存储桶 ID
.key("a/b/c.jpeg") // 媒体文件在存储桶中的路径
.build();
HeadObjectResponse headObjectResponse = s3Client.headObject(headObjectRequest);
System.out.println("Content Length: " + headObjectResponse.contentLength());
} catch (Exception e) {
e.printStackTrace();
} finally {
s3Client.close();
}
}
}
#include <aws/core/Aws.h>
#include <aws/core/auth/AWSCredentials.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/HeadObjectRequest.h>
#include <iostream>
#include <string>

int main() {
// 初始化 AWS SDK
const Aws::SDKOptions options;
InitAPI(options);
// 自定义访问域名
Aws::Client::ClientConfiguration clientConfig;
clientConfig.scheme = Aws::Http::Scheme::HTTPS;
clientConfig.endpointOverride = "vodsrc-internal.ap-guangzhou.eovod.com";
// 创建 S3 客户端
const Aws::S3::S3Client s3Client(
Aws::Auth::AWSCredentials(
"AccessKeyId", // 填入密钥对中的 AccessKeyId
"SecretAccessKey" // 填入秘钥对中的 SecretAccessKey
),
nullptr, clientConfig);
// 创建 HeadObject 请求
Aws::S3::Model::HeadObjectRequest request;
request.SetBucket("bucketid1"); // Bucket 设置为点播专业版应用中的存储桶 ID
request.SetKey("a/b/c.jpeg"); // 媒体文件在存储桶中的路径
// 发送请求
auto outcome = s3Client.HeadObject(request);
if (outcome.IsSuccess()) {
std::cout << "Head object succeeded!" << std::endl;
const auto &object = outcome.GetResult();
std::cout << "Content Length: " << object.GetContentLength() << std::endl;
} else {
const auto error = outcome.GetError();
std::cout << "Error: " << error.GetMessage() << std::endl;
}
// 清理 AWS SDK
Aws::ShutdownAPI(options);
return 0;
}
import boto3
from botocore.config import Config
from botocore.exceptions import ClientError


# 创建 S3 客户端
s3_client = boto3.client(
's3',
aws_access_key_id='AccessKeyId', # 填入密钥对中的 AccessKeyId
aws_secret_access_key='SecretAccessKey', # 填入秘钥对中的 SecretAccessKey
endpoint_url='https://vodsrc-internal.ap-guangzhou.eovod.com', # 自定义访问域名
config=Config(s3={'addressing_style': 'virtual'}), # 使用 virtual hosted-style
)

try:
# 获取媒体文件的元数据
response = s3_client.head_object(
Bucket="bucketid1", # Bucket 设置为点播专业版应用中的存储桶 ID
Key="a/b/c.jpeg" # 媒体文件在存储桶中的路径
)
print(response)
except ClientError as e:
print(f"Error: {e}")


EdgeOne 加速域名

专业版应用支持使用腾讯云 EdgeOne 进行媒体内容的加速分发。客户可以在 EdgeOne 中将域名源站配置为云点播专业版应用,即可使用自定义域名通过 EdgeOne 强大的安全加速网络,迅捷地下载或者播放媒体文件。
在 EdgeOne 中为专业版应用添加加速域名的操作方法请参见 EdgeOne 文档 VOD 源站指引添加加速域名