前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTMP协议Web直播点播视频平台EasyDSS采用Go语言对象存储解冻文件功能的实现

RTMP协议Web直播点播视频平台EasyDSS采用Go语言对象存储解冻文件功能的实现

原创
作者头像
TSINGSEE青犀视频
修改2021-03-18 10:12:48
5930
修改2021-03-18 10:12:48
举报
文章被收录于专栏:TSINGSEE青犀视频

我们介绍过很多关于EasyDSS的定制项目,其中大部分都是通过Go语言完成的,例如通过Go语言 gorm 框架钩子函数精简代码,或者通过Go语言生成归档文件功能,现下基于部分用户的使用需求,我们还需要做出小幅调整,目前的调整是需要将录像存储在云的OSS中。

OSS为对象存储服务,即云中心提供的一种云上存储。部分用户不便于自建服务器存储,就会选择OSS来进行云存储。一般对象存储分配为标准存储、低频存储和归档存储三种类型。其中标准存储和低频存储,可以直接生成 url 地址提供给用户访问,但是价格相比于归档存储高,对于部分不常使用的数据,可以选择归档存储降低价格。

归档存储的存储类型是一种不可以直接生成 url 地址就能访问的类型,在访问直接必须先对文件进行解冻操作,以下就以阿里云程序进行解冻代码的编写,其他腾讯云、移动云、华为云等程序类似,代码如下:

代码语言:javascript
复制
// 解冻文件
func RestoreObject(bucketName, file string) (string, error) {
   ret := "解冻命令未发送"
   // 获取存储空间。
   bucket, err := gOssClient.Bucket(bucketName)
   if err != nil {
      return ret, err
   }

   // 检查是否为归档类型文件。
   meta, err := bucket.GetObjectDetailedMeta(file)
   if err != nil {
      return ret, err
   }

   storage := meta.Get("x-oss-storage-class")

   // 如果是标准存储或者是低频存储,直接返回
   if storage != string(oss.StorageArchive) && storage != string(oss.StorageColdArchive) {
      return ret, errors.New("该文件存储类型不需要解冻")
   }

   status := meta.Get("X-Oss-Restore")
   if status != "" {
      ret = "不处于未解冻状态,无需解冻!"
      return ret, nil
   }

   // 如果是归档文件,调用解冻归档文件
   if storage == string(oss.StorageArchive) {
      err = bucket.RestoreObject(file)
      if err != nil {
         return ret, err
      } else {
         ret = "解冻命令已成功发送到后台!"
      }
   } else if storage == string(oss.StorageArchive) {
      var restoreConfig oss.RestoreConfiguration

      // 表示1小时内完成解冻。
      restoreConfig.Tier = string(oss.RestoreExpedited)
      // 表示2~5小时内完成解冻。
      //restoreConfig.Tier = string(oss.RestoreStandard)
      // 表示5~12小时内完成解冻。
      //restoreConfig.Tier = string(oss.RestoreBulk)
      // 解冻状态保持1天。
      restoreConfig.Days = 1
      err = bucket.RestoreObjectDetail(file, restoreConfig)
      if err != nil {
         return ret, err
      } else {
         ret = "解冻命令已成功发送到后台!"
      }
   }

   return ret, nil
}

其中 RestoreObject 就是解冻文件操作,也可以采用 RestoreObjectDetail 解冻文件。在解冻文件之前最好调用 meta.Get(“x-oss-strage-calss”) 获取文件的状态,如果是标准存储或者低频存储则不进行解冻操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档