对象存储 | 青训营笔记

129 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记

传统存储

传统存储一般是指直连式存储、网络附属存储和存储区域网络三种这三种存储技术。

  • 直连式存储:
    直接连接某台计算机的存储方式叫做直连式存储,常见的直连式存储形式是硬盘。 直连式存储容量大,可将多个磁盘合并成一个逻辑磁盘,维护和实施简单,不需要专业人员 就能操作。
  • 网络附属存储: 网络附属存储是指连接网络上具备存储功能的设备,可以理解为只能是自己使用的,其他人 无法使用的个人网盘。网络附属存储具备文件共享的特性。
  • 存储区域网络: 是指以网络为中心的存储结构,这种存储方式是企业级存储方案,它采用光纤接口,因此带宽很 高,不会受到SCSI存储结构布局的限制。
对象存储

对象存储系统会存储大量的对象,每一个对象都会有一个UID、数据主体和元数据三部分。 对象存储、文件存储和块存储本质上没有区别,它们的底层硬件介质,都是硬盘。不同的是,它们存储架构系统完全不同。 文件存储的操作对象是文件和文件夹,块存储的操作对象是磁盘,对象存储的操作对象是对象。

对象存储使用实例

在抖声项目中使用对象存储来对用户发布的视频和视频封面进行存储。 对象存储使用方法:
1.到云厂商官网申请bucket,bucket会有相对应的域名。
2.用各自语言的sdk来进行与自己存储空间的交互
3.在代码层面与对象存储交互时,需要使用自己账号的密钥,以便进行身份验证。
以下是上传视频到七牛云对象存储的示例代码。

func UploadVideoToQiNiu(file *multipart.FileHeader, filename string) {
   src, err := file.Open()
   if err != nil {
      log.Fatalln("qiniu put failed 1")
      return
   }
   defer src.Close()

   putPlicy := storage.PutPolicy{
      Scope: Bucket,
   }
   mac := qbox.NewMac(AccessKey, SerectKey)

   // 获取上传凭证
   upToken := putPlicy.UploadToken(mac)

   // 配置参数
   cfg := storage.Config{
      Zone:          &storage.ZoneHuanan, // 华南区
      UseCdnDomains: false,
      UseHTTPS:      false, // 非https
   }
   formUploader := storage.NewFormUploader(&cfg)

   ret := storage.PutRet{}        // 上传后返回的结果
   putExtra := storage.PutExtra{} // 额外参数

   key := "videos/" + filename

   err = formUploader.Put(context.Background(), &ret, upToken, key, src, file.Size, &putExtra)
   if err != nil {
      fmt.Println("qiniu put failed 2", err)
      return
   }

   url := "http://" + ImgUrl + "/" + ret.Key // 返回上传后的文件访问路径
   fmt.Println("视频播放地址: ", url)
   return

}

可以看到函数接收 *multipart.FileHeader类型的文件,经过处理后,会返回可以访问到此对象的url,程序拿到这个url之后就可以直接发起http请求来访问此对象。