如何采用Go语言对象存储解冻文件?


本文摘自网络,作者,侵删。

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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

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

// 解冻文件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”) 获取文件的状态,如果是标准存储或者低频存储则不进行解冻操作。


本文来自:51CTO博客

感谢作者:wx6084d152d85c2

查看原文:如何采用Go语言对象存储解冻文件?

相关阅读 >>

快看!Go-carbon 1.2.2 版本发布了!新增了时间设置和时间差比较功能

Go语言之错误处理

rtmp协议视频平台easydss开发中如何通过Go语言 Gorm 框架钩子函数精简代码?

【java】一篇文章带你玩转用java刷力扣

Golang 几种字符串的连接方式

(公众号新人进来)有趣的练习,提升Go水平

吊打jd_seckill,Go语言版免配置抢茅台程序,实力接盘~

Golang的组合和继承之间有什么区别?

面试题:让你捉摸不透的 Go reslice

Golang环境怎么安装

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...