七牛云存储--内存put示例,go sdk

啥都不说了,居然有文档,有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"`
}