Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59112
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 232
  • 用 户 组: 普通用户
  • 注册时间: 2020-11-30 14:45
个人简介

专注流媒体、视频物联网、云计算、大数据开发

文章分类

全部博文(22)

文章存档

2021年(18)

2020年(4)

我的朋友

分类: Python/Ruby

2021-03-18 09:57:32

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

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

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


点击(此处)折叠或打开

  1. // 解冻文件
  2. func RestoreObject(bucketName, file string) (string, error) {
  3.    ret := "解冻命令未发送"
  4.    // 获取存储空间。
  5.    bucket, err := gOssClient.Bucket(bucketName)
  6.    if err != nil {
  7.       return ret, err
  8.    }

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

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

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

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

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

  34.       // 表示1小时内完成解冻。
  35.       restoreConfig.Tier = string(oss.RestoreExpedited)
  36.       // 表示2~5小时内完成解冻。
  37.       //restoreConfig.Tier = string(oss.RestoreStandard)
  38.       // 表示5~12小时内完成解冻。
  39.       //restoreConfig.Tier = string(oss.RestoreBulk)
  40.       // 解冻状态保持1天。
  41.       restoreConfig.Days = 1
  42.       err = bucket.RestoreObjectDetail(file, restoreConfig)
  43.       if err != nil {
  44.          return ret, err
  45.       } else {
  46.          ret = "解冻命令已成功发送到后台!"
  47.       }
  48.    }

  49.    return ret, nil
  50. }
其中 RestoreObject 就是解冻文件操作,也可以采用 RestoreObjectDetail 解冻文件。在解冻文件之前最好调用 meta.Get(“x-oss-strage-calss”) 获取文件的状态,如果是标准存储或者低频存储则不进行解冻操作。
阅读(1188) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~