mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-08 23:52:26 +08:00
93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
|
|
"github.com/eiblog/utils/logd"
|
|
"qiniupkg.com/api.v7/conf"
|
|
"qiniupkg.com/api.v7/kodo"
|
|
"qiniupkg.com/api.v7/kodocli"
|
|
)
|
|
|
|
type bucket struct {
|
|
name string
|
|
domain string
|
|
accessKey string
|
|
secretKey string
|
|
}
|
|
|
|
var buckets = map[string]*bucket{}
|
|
|
|
func getBucket(typ string) *bucket {
|
|
return buckets[typ]
|
|
}
|
|
|
|
type PutRet struct {
|
|
Hash string `json:"hash"`
|
|
Key string `json:"key"`
|
|
}
|
|
|
|
func onProgress(fsize, uploaded int64) {
|
|
d := int(float64(uploaded) / float64(fsize) * 100)
|
|
if fsize == uploaded {
|
|
fmt.Printf("\rUpload completed! ")
|
|
} else {
|
|
fmt.Printf("\r%02d%% uploaded ", int(d))
|
|
}
|
|
}
|
|
|
|
func upload(typ string, filepath string) {
|
|
bucket := getBucket(typ)
|
|
if bucket == nil {
|
|
logd.Debug("invalid type:", typ)
|
|
return
|
|
}
|
|
|
|
file, err := os.Open(filepath)
|
|
if err != nil {
|
|
logd.Debugf("%s\n", err.Error())
|
|
return
|
|
}
|
|
data, err := ioutil.ReadAll(file)
|
|
file.Close()
|
|
chksum := fmt.Sprintf("%x", md5.Sum(data))
|
|
ext := path.Ext(filepath)
|
|
|
|
conf.ACCESS_KEY = bucket.accessKey
|
|
conf.SECRET_KEY = bucket.secretKey
|
|
// 创建一个client
|
|
c := kodo.New(0, nil)
|
|
|
|
// 设置上传的策略
|
|
policy := &kodo.PutPolicy{
|
|
Scope: bucket.name,
|
|
Expires: 3600,
|
|
InsertOnly: 1,
|
|
}
|
|
|
|
// 生成一个上传token
|
|
token := c.MakeUptoken(policy)
|
|
// 构建一个uploader
|
|
zone := 0
|
|
uploader := kodocli.NewUploader(zone, nil)
|
|
|
|
var ret PutRet
|
|
key := fmt.Sprintf("%s-%s%s", typ, chksum, ext)
|
|
|
|
fmt.Printf("Uploading .....")
|
|
var extra = kodocli.PutExtra{OnProgress: onProgress}
|
|
res := uploader.PutFile(nil, &ret, token, key, filepath, &extra)
|
|
// 打印返回的信息
|
|
if res != nil {
|
|
logd.Debugf("failed to upload patch file: %v\n", res)
|
|
return
|
|
}
|
|
|
|
url := kodo.MakeBaseUrl(bucket.domain, key)
|
|
fmt.Printf("url: %s\n", url)
|
|
}
|