这是我参与「第五届青训营 」笔记创作活动的第9天
前言
青训营的极简版抖音项目需要实现视频流的推荐功能,对于该需求,初步分析,可有两种实现方案:
- 本地存储
- 对象存储
考虑到后续部署的原因,决定使用对象存储,这里拟采用腾讯云的COS
对象存储 COS
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
无论是手机 APP、网站,或 HTML5 页面,对象存储可根据应用程序类型提供各语言 SDK,实现无缝接入。当业务爆发、用户产生内容(UGC)突增时,对象存储将根据请求和流量的需求自动扩展,从容应对业务突发访问状况。由于 UGC 通常具有时间维度级的访问特征,对象存储可将数据冷热分层,热数据使用标准存储,冷数据使用低频存储。配合生命周期规则配置,转换存储类别,有效降低存储成本。
COS配置
购买COS资源
前往官网购买对应的资源即可,选择最便宜的,大概十块钱内搞定。
NOTE: 记得购买外网下载流量,否则是要单独收费的
创建存储桶
勾选“公有读私有写”
创建密钥
记住这里的APPID和密钥,随后会用到
查阅官方SDK
以下是官方Golang SDK
上传接口根据用户文件的长度,自动切分数据, 降低用户的使用门槛,用户无需关心分块上传的每个步骤,当文件大小大于16MB,采用分块上传,用户可通过 PartSize 参数调整。 参数名称 | 参数描述 | 类型 | 是否必填 | | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ---- | | key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名
examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg中,对象键为 doc/pic.jpg | string | 是 | | filepath | 本地文件名 | string | 是 | | opt | 对象属性 | Struct | 否 | | OptIni | 设置对象属性和 ACL,详情请参见 InitiateMultipartUploadOptions | Struct | 否 | | PartSize | 块大小,单位为 MB,如果用户不指定或者指定 partSize <= 0,由 Go SDK 自动切分,新版本默认大小为16MB | int | 否 | | ThreadPoolSize | 线程池大小,默认为1 | int | 否 | | CheckPoint | 是否开启断点续传,默认为 false | bool | 否
package main
import (
"context"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
)
func main() {
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucket
// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.cloud.tencent.com/ ,关于地域的详情见 https://cloud.tencent.com/document/product/436/6224 。
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// 通过环境变量获取密钥
// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
},
})
key := "exampleobject"
_, _, err := client.Object.Upload(
context.Background(), key, "localfile", nil,
)
if err != nil {
panic(err)
}
}
其中,"examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com" 是你的存储桶的地址,需要自行替换
测试
调用该SDK,上传文件至COS。