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.ReadClosererror

// rc 是 `io.ReadCloser`

rc, err := goss.Get("test/test.txt")
defer rc.Close()
bs, err := ioutil.ReadAll(rc)
fmt.Println(string(bs))

GetString

从云存储获取文件,返回字符串。参数是 key。返回值是 stringerror

content, err := goss.GetString("test/test.txt")

fmt.Println(content)

GetBytes

从云存储获取文件,返回字符串。参数是 key。返回值是 []byteerror

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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!