这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记。
这是为数不多的了解的几门课了,课程终于不再是硬核文,因为之前使用过阿里云OSS对象存储保存过头像图片,所以在这次大项目中也使用到了。
OSS对象存储
为什么要使用OSS对象存储?使用OSS对象存储有什么好处?
- 不限制存储空间大小。
- 存储加速,使得视频的上传和下载得到提升。
- 采用数据冗余存储机制确保硬件失效时的数据可靠性和可用性。
- 将图片、视频、前端JS等静态文件上传到OSS,减轻本地存储带来的开销,缓解服务器压力。
- 拥有灵活的鉴权,授权机制。提供STS和URL鉴权和授权机制、IP黑白名单、防盗链、主子账号等功能。
阿里云OSS使用教程
首先注册阿里云账号,然后开通OSS服务。(新用户好像是可以免费体验三个月的,好像还有什么问卷调查可以延长时间,白嫖党表示真香)
然后开通服务之后,要做的其实就是两步:一:创建存储空间;二:上传文件;
创建存储空间
跟着创建Bucket文档,创建一个Bucket,然后记住自己选择的地域(Endpoint)。
上传文件
不同语言的SKD请到API文档查看,这次大项目使用go的示例如下。
- 创建OSSClient实例 首先需要实例化OSSClient,需要的参数为Endpoint、AccessKeyId、AccessKeySecret。 这里就需要刚才开通Bucket记下的Endpoint,进入Endpoint对照表查找对应的填入。AccessKeyId和AccessKeySecret则是去控制台右下角查询。
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
- 填写Bucket空间名称
这里就填入刚才创建的存储空间Bucket的名字
// 填写存储空间名称,例如examplebucket。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
3.获取文件对象
在官方文档中,这里是打开本地文档获取文件对象,而在大项目中视频文件是从前端接收的*multipart.FileHeader类型,所以我们需要先打开,这样就得到了一个multipart.File对象。
data, err := c.FormFile("data")
file, _ := data.Open()
4.使用简单上传上传文件
这里有两个参数path和file,file就不必说了,而path则是保存在Bucket中的路径以及命名,为了查看方便便于管理,在项目中path的路径为上传的时间/年/月/日,文件名字即为用户id加上上传时间的时分秒。这样不仅便于管理,而且避免了当用户上传同一文件时,出现同名覆盖的情况。
err := bucket.PutObject(path, file)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
同时上传文件还有许多方式,譬如将要上传的较大文件分成多个分片来分别上传,上传完成后再调用CompleteMultipartUpload接口将这些Part组合成一个Object来达到断点续传的效果。由于时间原因在项目中并没有使用,之后有使用可以去上传文档查看。
5.获取上传文件的URL
文件上传后,可以进入Bucket查看文件,而分享文件的Url则为http://+Bucket名称+.+Endpoint+文件路径,即
"http://y1-douyin.oss-cn-hangzhou.aliyuncs.com/+path"
视频抽帧
阿里云OSS不仅有有优秀的存储功能,还有很强大的数据处理功能。例如在项目中需要给到视频封面地址,这个时候就需要视频的抽帧功能。
方式也很简单在视频的URL后加上参数,
则封面地址为<原视频URL>?x-oss-process=video/snapshot,t_7000,f_jpg,w_800,h_600,m_fast
这是截取视频第7秒的内容,然后输出为JPG格式的图片,宽度为800,高度为600,可以根据需要进行更改。
更多参数设置请去截帧文档查看。
总结
通过对OSS对象存储的学习,掌握了更多一种新的存储方式。同时在学习使用过程中,也学会了如何去使用别人的API接口,站在巨人的肩膀上学习。