goss - 一个简洁的对象存储库
goss: github.com/eleven26/goss
背景
一开始写这个东西只是为了写一个命令行工具,拿来将阿里云的 OSS 作为自己的一个临时的云盘,可以通过命令行上传下载一些文件。
当然可能有人会问那么多云盘为什么不用,简单来说就是觉得这些云盘用起来有点麻烦,你要打开网页或者打开客户端,我是大概是一个懒惰的人,只想省去这些繁琐的操作。
另外,这些云盘普遍有个特点就是上传下载速度往往比较慢,但用 OSS 来存储可以有一个较快的下载速度,只是会产生费用。
Goss 的优势
兼容 amazon s3 协议,支持但不限于阿里云 OSS、腾讯云 COS、七牛云 kodo、华为云 OBS、amazon s3。
完善的测试:有完善的单元测试、集成测试。
容易使用的接口:通过
goss.Put
等方式就可以上传下载文件,隐藏了繁琐的细节。
Goss 提供的接口
goss 目前提供了常用的一些接口:
这些接口覆盖了我的需要了,所以目前就只提供了这些接口;
Put
上传文件到云存储。第一个参数是 key,第二个参数是 io.Reader
。
data := []byte("this is some data stored as a byte slice in Go Lang!")
r := bytes.NewReader(data)
err := goss.Put("test/test.txt", r)
PutFromFile
上传文件到云存储。第一个参数是 key,第二个参数是本地文件路径。
err := goss.PutFromFile("test/test.txt", "/path/to/test.txt")
Get
从云存储获取文件,返回字符串。参数是 key。返回值是 io.ReadCloser
和 error
。
// rc 是 `io.ReadCloser`
rc, err := goss.Get("test/test.txt")
defer rc.Close()
bs, err := ioutil.ReadAll(rc)
fmt.Println(string(bs))
GetString
从云存储获取文件,返回字符串。参数是 key。返回值是 string
和 error
content, err := goss.GetString("test/test.txt")
fmt.Println(content)
GetBytes
从云存储获取文件,返回字符串。参数是 key。返回值是 []byte
和 error
bs, err := storage.Get("test/test.txt")
fmt.Println(string(bs))
GetToFile
下载云存储文件到本地。第一个参数是 key,第二个参数是本地路径。
// 第一个参数是云端路径,第二个参数是本地路径
err := goss.GetToFile("test/test.txt", "/path/to/local")
Delete
删除云存储文件。
err := goss.Delete("test/test.txt")
Exists
判断云存储文件是否存在。
exists, err := goss.Exists("test/test.txt")
Files
根据前缀获取文件列表。
exists, err := goss.Files("test/")
Size
获取云存储文件大小。
size, err := goss.Size("test/test.txt")
goss-cli
正如本文一开始说的,其实一开始是想做一个命令行工具的,最后写成了一个类库。
但是我的命令行工具也是存在的,从 goss 里面拆分出去了,成了 goss-cli
当然功能也是比较简单,但是也足够了,下面是一些示例:
help:
➜ goss -h
Usage:
[command]
Available Commands:
completion Generate the autocompletion script for the specified shell
debug 调试命令
get 获取指定文件
help Help about any command
list 列出指定目录下的文件
put 上传文件
Flags:
-h, --help help for this command
Use " [command] --help" for more information about a command.
list:
➜ goss list mac/
Size LastModified Key
0B 2018-06-18 00:13:24 mac/
452.2MB 2020-11-28 06:09:25 mac/Command_Line_Tools_for_Xcode_12.2.dmg
2.0MB 2018-06-18 01:04:39 mac/Go2Shell.dmg
135.3MB 2018-06-18 00:59:00 mac/Navicat Premium 12.0.23.dmg
155.0MB 2020-11-05 00:22:48 mac/Navicat Premium_15.0.20.dmg
1.2GB 2018-06-18 00:34:39 mac/Office 2016 for Mac 多国语言大客户版.dmg
31.0MB 2018-06-18 01:28:06 mac/Sketch49.dmg
16.0MB 2018-06-18 01:28:31 mac/Tunnelblick_3.7.6beta03_build_5031.dmg
69.5MB 2018-06-18 00:55:53 mac/googlechrome-67.0.3396.87.dmg
6.7MB 2018-06-18 01:04:45 mac/iTerm2-3_1_6.zip
13.0MB 2018-06-18 01:04:57 mac/mindnodexx.zip
43.5MB 2018-06-18 01:27:09 mac/privatetunnel-mac-2.8.dmg
459.2MB 2018-12-28 01:03:48 mac/vmware fushion.zip
get:
➜ goss get mac/Go2Shell.dmg
下载成功!保存路径:"Go2Shell.dmg"
➜ ls -lh Go2Shell.dmg
-rw-r--r-- 1 ruby staff 1.9M Aug 25 09:10 Go2Shell.dmg
本作品采用《CC 协议》,转载必须注明作者和本文链接