3.4. 创建 Token
Github: github.com/bigfile/bigfile
API
创建 Token 是接下来所有操作的开始,让我们先开看一下 API 参数。
POST /api/bigfile/token/create
| name | type | required | description | 
|---|---|---|---|
| appUid | string | yes | APP UID | 
| nonce | string | yes | 32 到 48 长度的随机字符串 | 
| sign | string | yes | 请求参数签名 | 
| path | string | no | Token 的作用域,默认为:/,可以理解为根目录 | 
| ip | string | no | 限制当前 Token 仅能被使用的 IP 列表,多个 IP 逗号分隔 | 
| expiredAt | timestamp | no | Token 失效时间,默认永久有效 | 
| secret | string | no | Token 密钥,12 到 32 位,建议设置,默认为空 | 
| availableTimes | int | no | Token 可用次数,默认无限次数 | 
| readOnly | bool | no | 限制此 Token 仅能被用于去下载文件 | 
示例
package main
import (
    "fmt"
    "io/ioutil"
    libHttp "net/http"
    "strings"
    "time"
    "github.com/bigfile/bigfile/databases/models"
    "github.com/bigfile/bigfile/http"
)
func main() {
    appUid := "42c4fcc1a620c9e97188f50b6f2ab199"
    appSecret := "f8f2ae1fe4f70b788254dcc991a35558"
    body := http.GetParamsSignBody(map[string]interface{}{
        "appUid":         appUid,
        "nonce":          models.RandomWithMd5(128),
        "path":           "/images/png",
        "expiredAt":      time.Now().AddDate(0, 0, 2).Unix(),
        "secret":         models.RandomWithMd5(44),
        "availableTimes": -1,
        "readOnly":       false,
    }, appSecret)
    request, err := libHttp.NewRequest(
        "POST", "https://127.0.0.1:10985/api/bigfile/token/create", strings.NewReader(body))
    if err != nil {
        fmt.Println(err)
        return
    }
    request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    resp, err := libHttp.DefaultClient.Do(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    if bodyBytes, err := ioutil.ReadAll(resp.Body); err != nil {
        fmt.Println(err)
        return
    } else {
        fmt.Println(string(bodyBytes))
    }
}
响应成功之后,你将得到下面这样的响应:
{
    "requestId":10001,
    "success":true,
    "errors":null,
    "data":{
        "availableTimes":-1,
        "expiredAt":1568127304,
        "ip":null,
        "path":"/images/png",
        "readOnly":0,
        "secret":"46afc3607a93ac410357a8ed53a872b8",
        "token":"4d50ae8061c1d6f148a45031356294bd"
    }
}
证书错误
如果您再使用 HTTP API 的时候,遇到如下错误:
x509: certificate signed by unknown authority
是因为使用 rpc:make-cert 生成的证书不被系统信任,这里有两种解决方案:
- 将证书加入到系统的可信任证书库中
 - 在请求时选择不验证证书,例如:
 
import "crypto/tls"
....
funf main(){
tr := &http.Transport{    //解决x509: certificate signed by unknown authority
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
client := &http.Client{
        Timeout:   15 * time.Second,
        Transport: tr,    //解决x509: certificate signed by unknown authority
    }
....
client.Do(req)
}
                                            英文文档:bigfile.site
          
Bigfile 中文文档
            
            
                关于 LearnKu