文章归档

Open Clound storage service

国庆这几天写的,套用阿里云的名称,就叫开放云存储服务吧,初衷只是想测试一下存储商的速度,后来发觉php写的SpeedTest不太好用,因为要依赖php和其他各个组件。

后来折腾了一下hiphop,这玩意依赖太过分了,用的很不爽,就用go重新实现了一遍存储的SDK。目前OCSS支持四个主流的云存储服务,包括盛大云,阿里云,又拍和七牛。它们的API是一样的(看起来是一样的,呵呵)

数据结构

在package fs里,有Object和Bucket,主要的结构如下,但不同的存储商的SDK又各有一些不同的地方,可看源码

type Object struct {
	EntryURI string
	Type string
	Mtime string
	Size int64
	Body io.ReadWriter
}

type Bucket struct {
	EntryURI, Delimiter string
	Objs []*Object
	CommonPrefixes []string
}

EntryURI通常由Bucket和Key组成,例如"/testbucket/resume.pdf"或者是"/testbucket/music/",Object可以表示一个文件或者目录。Bucket里的Delimiter是用来进行前缀查询的,会一直匹配到Delimiter才结束,然后返回的对象会保存到Objs和CommonPrefixes里,Objs通常可以理解成文件,CommonPrefixes可理解成当前路径下的文件夹名

存储API

所有的SDK都实现了如下的API,用法几乎是完全一样的,当然,还有其他的。

func (s *Service) Get(localfile, entryURI string) (code int, err error)
func (s *Service) Put(entryURI, mimeType, localfile string) (code int, err error)
func (s *Service) Delete(entryURI string) (code int, err error)

func (s *Service) PutObject(o *fs.Object) (code int, err error)
func (s *Service) GetObject(o *fs.Object) (code int, err error)
func (s *Service) DelObject(o *fs.Object) (code int, err error)

func (s *Service) NewBucket(b *fs.Bucket) (code int, err error)
func (s *Service) DropBucket(b *fs.Bucket) (code int, err error)
func (s *Service) ListBucket(b *fs.Bucket) (code int, err error)

Get/Put/Delete是简化的API,可以直接将某个文件作为一个Object上传,也可以直接将服务器上的某个Obejct保存到本地的localfile里。ListBucket可列Bucket或者目录。

用法

每个SDK目录下都有对应的单元测试文件,可参考这里,写的很拙劣,见笑了。

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>