最近试用了一下七牛的存储服务, 由于最近在使用golang,所以就拿七牛的golang sdk来进行相应的操作。 为了不至于以后使用时,总是去查七牛的文档(七牛的文档有些地方需要来回查), 所以在此简单做一个基本的使用教程。
安装
go get -u qiniupkg.com/api.v7
注意安装时,应该使用如上的命令中的连接,而不是七牛官方文档当中的连接。
初始化
使用如下代码进行初始化:
import "qiniupkg.com/api.v7/kodo"
var (
ACCESS_KEY = ""
SECRET_KEY = ""
DEFAULT_BUCKET_NAME = ""
)
func main() {
kodo.SetMac(ACCESS_KEY, SECRET_KEY)
zone := 0
qiniuClient := kodo.New(zone, nil)
bucket := qiniuClient.Bucket(DEFAULT_BUCKET_NAME)
netContext := context.Background()
}
该代码是基于最新的api.v7代码,七牛官方文档当中提及的代码并非根据最新代码而来。
上传文件
按照七牛的官方文档,上传文件的流程如下(上传文件发生在客户端而非业务服务端时):
1. 业务服务器颁发上传凭证
给客户端(终端用户)
2. 客户端凭借上传凭证
上传文件到七牛
3. 在七牛获得完整数据后,发起一个 HTTP 请求回调到业务服务器
4. 业务服务器保存相关信息,并返回一些信息给七牛
5. 七牛原封不动地将这些信息转发给客户端(终端用户)
生成上传凭证
业务服务器生成上传凭证代码:
key := generateFileKey() //根据自己的规则生成所需要的key,也可以不指定而由七牛服务器自动生成(即使用文件的hash值)
//指定上传策略
policy := &kodo.PutPolicy {
Scope: DEFAULT_BUCKET_NAME + ":" + key,
Expires: 3600, //如果不指定,默认的有效期为3600s
CallbackUrl: "http://i.test.com/qiniu/callback",
CallbackBody: "key=$(key)&loation=$(x:location)",
}
uploadToken := qiniuClient.MakeUptoken(policy)
上传策略暂时可以先指定如上的几部分,如果需要的话可以根据实际情况指定其他的参数。其中:CallbackBody
的形式一般而言应该如上述形式,其中的key是指七牛的魔法变量,而$(x:location)这样的是用户自定义变量,这些自定义变量必须使用x:
开头(由客户端在上传文件到七牛服务器时同时指定这些变量的值)。
其他的上传策略相关项可以查看七牛的官方文档。七牛上传策略
业务服务器直接上传文件
业务服务器处理回调
业务服务器处理上传文件的回调(URL在上传策略当中的CallbackUrl
当中指定)。严格来讲该部分已经不再属于golang sdk的使用范畴,但是由于我们使用golang sdk是作为业务服务器的一部分来使用(而不是作为客户端),所以此处的业务服务器回调处理也一并在这儿列出。
回调处理,首先应该验证回调的request是否是合法的。具体可以见七牛的官方文档[七牛回调合法性][qnhdhfx]。此处需要注意的是,验证回调合法性的时候,是需要读取整个request body的,所以此处读取request body的时候是需要保存到变量当中的,避免验证完合法性之后再次读取request body的时候读取的内容为空。
这之后就可以正常进行业务处理了。
未完待续:由于某些原因,此文暂时未完成,等有时间补充完整。