啥都不说了,居然有文档,有git为啥不提供example?
自己看代码,琢磨了一下,原来是要这么用的。这里不得不吐槽一下package的命名,为啥要去io?golang自带系统包名就有io啊,哥哥。
从git上线下载包,go get -u github.com/qiniu/api
然后,贴代码:
package main import ( "bufio" "fmt" . "github.com/qiniu/api/conf" qnio "github.com/qiniu/api/io" "github.com/qiniu/api/rs" "os" ) func main() { ACCESS_KEY = "xxxxxxxx" SECRET_KEY = "xxxxxxxx" var ret qnio.PutRet var extra = &qnio.PutExtra{ MimeType: "image/jepg", CheckCrc: 0, } key := "1024x1024.jpg" scope := fmt.Sprintf("skypixeltest:%s", key) putPolicy := rs.PutPolicy{ Scope: scope, // Expires: expires, } uptoken := putPolicy.Token(nil) fi, err := os.Open("/Users/qpzhang/Downloads/1024x1024.jpg") st, _ := fi.Stat() if err != nil { panic(err) } defer fi.Close() data := bufio.NewReader(fi) fmt.Println("size ", st.Size()) err = qnio.Put2(nil, &ret, uptoken, key, data, st.Size(), extra) if err != nil { fmt.Println(err) } else { fmt.Println("put sucess......", ret) } }
scope的说明参考官方:
http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html
再吐槽一下,说明文档和变量名不一样,你这是要闹哪样。说明文档都是用json的变量名。
type PutPolicy struct { Scope string `json:"scope"` Expires uint32 `json:"deadline"` // 截止时间(以秒为单位) InsertOnly uint16 `json:"exclusive,omitempty"` // 若非0, 即使Scope为 Bucket:Key 的形式也是insert only DetectMime uint16 `json:"detectMime,omitempty"` // 若非0, 则服务端根据内容自动确定 MimeType FsizeLimit int64 `json:"fsizeLimit,omitempty"` SaveKey string `json:"saveKey,omitempty"` CallbackUrl string `json:"callbackUrl,omitempty"` CallbackBody string `json:"callbackBody,omitempty"` ReturnUrl string `json:"returnUrl,omitempty"` ReturnBody string `json:"returnBody,omitempty"` PersistentOps string `json:"persistentOps,omitempty"` PersistentNotifyUrl string `json:"persistentNotifyUrl,omitempty"` PersistentPipeline string `json:"persistentPipeline,omitempty"` AsyncOps string `json:"asyncOps,omitempty"` EndUser string `json:"endUser,omitempty"` }