mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-12 01:12:27 +08:00
115 lines
2.4 KiB
Go
115 lines
2.4 KiB
Go
package kodocli
|
||
|
||
import (
|
||
"net/http"
|
||
|
||
"github.com/qiniu/api.v7/api"
|
||
"github.com/qiniu/api.v7/conf"
|
||
"github.com/qiniu/x/rpc.v7"
|
||
"github.com/qiniu/x/url.v7"
|
||
)
|
||
|
||
// ----------------------------------------------------------
|
||
|
||
type zoneConfig struct {
|
||
UpHosts []string
|
||
}
|
||
|
||
var zones = []zoneConfig{
|
||
// z0:
|
||
{
|
||
UpHosts: []string{
|
||
"http://upload.qiniu.com",
|
||
"http://up.qiniu.com",
|
||
"-H up.qiniu.com http://183.136.139.16",
|
||
},
|
||
},
|
||
// z1:
|
||
{
|
||
UpHosts: []string{
|
||
"http://upload-z1.qiniu.com",
|
||
"http://up-z1.qiniu.com",
|
||
"-H up-z1.qiniu.com http://106.38.227.27",
|
||
},
|
||
},
|
||
// z2 华南机房:
|
||
{
|
||
UpHosts: []string{
|
||
"http://up-z2.qiniu.com",
|
||
"http://upload-z2.qiniu.com",
|
||
},
|
||
},
|
||
// na0 北美机房:
|
||
{
|
||
UpHosts: []string{
|
||
"http://up-na0.qiniu.com",
|
||
"http://upload-na0.qiniu.com",
|
||
},
|
||
},
|
||
}
|
||
|
||
// ----------------------------------------------------------
|
||
|
||
type UploadConfig struct {
|
||
UpHosts []string
|
||
Transport http.RoundTripper
|
||
|
||
APIHost string
|
||
Scheme string
|
||
}
|
||
|
||
type Uploader struct {
|
||
Conn rpc.Client
|
||
UpHosts []string
|
||
ApiCli *api.Client
|
||
}
|
||
|
||
func NewUploader(zone int, cfg *UploadConfig) (p Uploader) {
|
||
|
||
var uc UploadConfig
|
||
if cfg != nil {
|
||
uc = *cfg
|
||
}
|
||
if uc.Scheme != "https" {
|
||
uc.Scheme = "http"
|
||
}
|
||
if uc.APIHost == "" {
|
||
uc.APIHost = api.DefaultApiHost
|
||
}
|
||
if len(uc.UpHosts) == 0 {
|
||
if zone > 0 && zone < len(zones) {
|
||
uc.UpHosts = zones[zone].UpHosts
|
||
}
|
||
}
|
||
|
||
p.UpHosts = uc.UpHosts
|
||
p.Conn.Client = &http.Client{Transport: uc.Transport}
|
||
p.ApiCli = api.NewClient(uc.APIHost, uc.Scheme)
|
||
return
|
||
}
|
||
|
||
func NewUploaderWithoutZone(cfg *UploadConfig) (p Uploader) {
|
||
return NewUploader(-1, cfg)
|
||
}
|
||
|
||
// ----------------------------------------------------------
|
||
|
||
// 根据空间(Bucket)的域名,以及文件的 key,获得 baseUrl。
|
||
// 如果空间是 public 的,那么通过 baseUrl 可以直接下载文件内容。
|
||
// 如果空间是 private 的,那么需要对 baseUrl 进行私有签名得到一个临时有效的 privateUrl 进行下载。
|
||
//
|
||
func MakeBaseUrl(domain, key string) (baseUrl string) {
|
||
return "http://" + domain + "/" + url.Escape(key)
|
||
}
|
||
|
||
// ----------------------------------------------------------
|
||
|
||
// 设置使用这个SDK的应用程序名。userApp 必须满足 [A-Za-z0-9_\ \-\.]*
|
||
//
|
||
func SetAppName(userApp string) error {
|
||
|
||
return conf.SetAppName(userApp)
|
||
}
|
||
|
||
// ----------------------------------------------------------
|