oss

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 11, 2024 License: MIT Imports: 9 Imported by: 0

README

通用对象存储服务客户端 oss

通用对象存储服务(Object Storage Service,OSS)客户端。

  • authored by sliveryou

背景

对象存储非常适合存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,
而一个对象文件可以是任意大小,一般从几 KB 到 5T 不等。

详细概述可参考如下地址:

支持服务

  • 付费服务:

  • 免费服务:

    • 开源对象存储 MinIO 一套开源的对象存储服务,支持单机部署和分布式部署,纯内网环境的微服务架构中可搭建 MinIO 集群提供对象存储服务
    • 本地存储 Local 推荐只在纯内网环境的单体服务架构中使用,本地存储实际是将文件对象存储在指定本地文件目录下,可以使用 nginx 或 gin 框架的 Static 路由对该文件目录进行服务
    • 模拟存储 Mock 不做任何文件对象的增删改查操作,一般在测试或不需要对象存储功能时使用

设计思路

// OSS 客户端接口
type OSS interface {
	// Cloud 获取云服务商名称
	Cloud() string
	// GetURL 获取对象在 OSS 上的完整访问 URL
	GetURL(key string) string
	// GetObject 获取对象在 OSS 的存储数据
	GetObject(key string) (io.ReadCloser, error)
	// PutObject 上传对象至 OSS
	PutObject(key string, reader io.Reader) (string, error)
	// DeleteObjects 批量删除 OSS 上的对象
	DeleteObjects(keys ...string) error
	// UploadFile 上传文件至 OSS,filePath:文件路径,partSize:分块大小(字节),routines:并发数
	UploadFile(key, filePath string, partSize int64, routines int) (string, error)
	// AuthorizedUpload 授权上传至 OSS,expires:过期时间(秒)
	AuthorizedUpload(key string, expires int) (string, error)
	// GetThumbnailSuffix 获取缩略图后缀,如果只传一个值则进行等比缩放,两个值都传时会强制缩放,可能会导致图片变形
	GetThumbnailSuffix(width, height int, size int64) string
}

关于文件的需求一般是:

  1. 前端上传文件
  2. 后端接收并存储
  3. 后端返回前端可访问文件的地址或提供文件下载接口

文件托管可以是一块很大的课题,获取文件服务一般不应该由业务服务器提供,主要文件属于一种静态的数据,
由服务器来处理不免显得有些浪费资源,并且,将文件托管于对象存储服务上,在容灾、分担业务服务器压力等方面具有不少的好处。

所以,OSS 客户端的接口设计主要从对文件对象的增删改查入手:

  • 增、改:PutObject,UploadFile,AuthorizedUpload
    • PutObject 上传较小的 io.Reader 对象
    • UploadFile 上传较大的文件对象,会并发的对文件进行分块和断点续传
    • AuthorizedUpload 授权给客户端上传,不经由服务端上传,减少传输文件的 IO 并分摊服务端压力
    • 当 key 相同时相当于执行覆盖更新操作
  • 删:DeleteObjects
    • DeleteObjects 批量根据 key 进行对象删除
  • 查:GetURL,GetObject
    • GetURL 根据 key 获取对象在 OSS 上的完整访问 URL
    • GetObject 根据 key 获取对象在 OSS 的存储数据

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	UseSSL          bool   `json:",optional"`                                         // 是否使用安全配置(用于 minio 和 local 云服务商模式)
	UploadInternal  bool   `json:",optional"`                                         // 是否使用内网上传(用于 aliyun 云服务商模式)
	NotSetACL       bool   `json:",optional"`                                         // 不设置权限规则
	Cloud           string `json:",options=[aliyun,huawei,tencent,minio,local,mock]"` // 云服务商(当前支持 aliyun、huawei、tencent、minio、local 和 mock)
	EndPoint        string `json:",optional"`                                         // 端节点
	AccessKeyID     string `json:",optional"`                                         // 访问鉴权ID
	AccessKeySecret string `json:",optional"`                                         // 访问鉴权私钥
	BucketName      string `json:",optional"`                                         // 存储桶名称
}

Config OSS 配置

type OSS

type OSS interface {
	// Cloud 获取云服务商名称
	Cloud() string
	// GetURL 获取对象在 OSS 上的完整访问 URL
	GetURL(key string) string
	// GetObject 获取对象在 OSS 的存储数据
	GetObject(key string) (io.ReadCloser, error)
	// PutObject 上传对象至 OSS
	PutObject(key string, reader io.Reader) (string, error)
	// DeleteObjects 批量删除 OSS 上的对象
	DeleteObjects(keys ...string) error
	// UploadFile 上传文件至 OSS,filePath:文件路径,partSize:分块大小(字节),routines:并发数
	UploadFile(key, filePath string, partSize int64, routines int) (string, error)
	// AuthorizedUpload 授权上传至 OSS,expires:过期时间(秒)
	AuthorizedUpload(key string, expires int) (string, error)
	// GetThumbnailSuffix 获取缩略图后缀,如果只传一个值则进行等比缩放,两个值都传时会强制缩放,可能会导致图片变形
	GetThumbnailSuffix(width, height int, size int64) string
}

OSS 客户端接口

func MustNewOSS

func MustNewOSS(c Config) OSS

MustNewOSS 新建 OSS 客户端

func NewOSS

func NewOSS(c Config) (OSS, error)

NewOSS 新建 OSS 客户端

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL