From 0b1e0343460d7b82cae26b6e4f0a83ebfea733e3 Mon Sep 17 00:00:00 2001 From: deepzz0 Date: Sun, 18 Dec 2016 00:16:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api.go | 37 ++++++++++++--------- conf/app.yml | 6 ++-- glide.lock | 20 ++++++++---- qiniu.go | 75 ++++++++++++++++++++----------------------- qiniu_test.go | 21 ++++++++++++ static/feed.xml | 13 ++++++++ static/opensearch.xml | 6 ++++ static/sitemap.xml | 16 +++++++++ 8 files changed, 128 insertions(+), 66 deletions(-) create mode 100644 qiniu_test.go create mode 100755 static/feed.xml create mode 100755 static/opensearch.xml create mode 100755 static/sitemap.xml diff --git a/api.go b/api.go index 28a54bc..d050b31 100644 --- a/api.go +++ b/api.go @@ -121,7 +121,7 @@ func apiPassword(c *gin.Context) { return } Ei.Password = newPwd - responseNotice(c, NOTICE_SUCCESS, "更改成功", "") + responseNotice(c, NOTICE_SUCCESS, "更新成功", "") } func apiPostDelete(c *gin.Context) { @@ -294,7 +294,7 @@ func apiSerieAdd(c *gin.Context) { if err == nil && mid > 0 { serie := QuerySerie(int32(mid)) if serie == nil { - responseNotice(c, NOTICE_NOTICE, "not found serie", "") + responseNotice(c, NOTICE_NOTICE, "专题不存在", "") return } serie.Name = name @@ -398,19 +398,26 @@ func apiTrashRecover(c *gin.Context) { } func apiFileUpload(c *gin.Context) { - - // file, header , err := c.Request.FormFile("upload") - // filename := header.Filename - // fmt.Println(header.Filename) - // out, err := os.Create("./tmp/"+filename+".png") - // if err != nil { - // log.Fatal(err) - // } - // defer out.Close() - // _, err = io.Copy(out, file) - // if err != nil { - // log.Fatal(err) - // } + type Size interface { + Size() int64 + } + file, header, err := c.Request.FormFile("upload") + if err != nil { + responseNotice(c, NOTICE_NOTICE, "上传失败", "") + return + } + s, ok := file.(Size) + if !ok { + responseNotice(c, NOTICE_NOTICE, "文件太大", "") + return + } + filename := strings.ToLower(header.Filename) + url, err := Upload(filename, s.Size(), file) + if err != nil { + responseNotice(c, NOTICE_NOTICE, "上传失败", "") + return + } + responseNotice(c, NOTICE_SUCCESS, url, "") } func responseNotice(c *gin.Context, typ, content, hl string) { diff --git a/conf/app.yml b/conf/app.yml index ccea14b..c581e18 100644 --- a/conf/app.yml +++ b/conf/app.yml @@ -1,5 +1,5 @@ # 运行模式 dev or prod -runmode: prod +runmode: dev # 回收箱保留48小时 trash: -48 # 定时清理回收箱,%d小时 @@ -37,8 +37,8 @@ staticversion: 2 kodo: name: eiblog domain: st.deepzz.com - accesskey: - secretkey: + accesskey: MB6AXl_Sj_mmFsL-Lt59Dml2Vmy2o8XMmiCbbSeC + secretkey: BIrMy0fsZ0_SHNceNXk3eDuo7WmVYzj2-zrmd5Tf # 运行模式 mode: # you can fix certfile, keyfile, domain diff --git a/glide.lock b/glide.lock index e65e082..a6e8608 100644 --- a/glide.lock +++ b/glide.lock @@ -1,28 +1,28 @@ hash: 4b70e76a2e830e97033c06d0e5a90c3199985ff5070bdf8364b1feca63d5caa5 -updated: 2016-11-16T21:02:51.442531751+08:00 +updated: 2016-12-17T23:59:11.607037369+08:00 imports: - name: github.com/boj/redistore version: fc113767cd6b051980f260d6dbe84b2740c46ab0 - name: github.com/eiblog/blackfriday version: c0ec111761ae784fe31cc076f2fa0e2d2216d623 - name: github.com/eiblog/utils - version: 06c7dc24b885333250d26e34d2932d4a7cfa8b46 + version: ad2f63940c4f16d0dbfc3f4df59e8cb7af0f80ec subpackages: - logd - mgo - tmpl - uuid - name: github.com/garyburd/redigo - version: 80f7de34463b0ed3d7c61303e5619efe1b227f92 + version: f8c71fc158ba13d50a7f5d8f10ea18ec49463c73 subpackages: - internal - redis - name: github.com/gin-gonic/contrib - version: cf28f84316e50a05a59d174b37c26ad9a43a1201 + version: 45b1fbf9c69a8b8905d20f665b559d03f932db84 subpackages: - sessions - name: github.com/gin-gonic/gin - version: bb159f9260a262fccbdbd6f37f8575d1e7e6aaa0 + version: e2212d40c62a98b388a5eb48ecbdcf88534688ba subpackages: - binding - render @@ -35,15 +35,21 @@ imports: - name: github.com/gorilla/securecookie version: fa5329f913702981df43dcb2a380bac429c810b5 - name: github.com/gorilla/sessions - version: ca9ada44574153444b00d3fd9c8559e4cc95f896 + version: 52389059572b4736b2b7d899b0242ecc449c8779 - name: github.com/manucorporat/sse version: ee05b128a739a0fb76c7ebd3ae4810c1de808d6d +- name: github.com/mattn/go-isatty + version: 30a891c33c7cde7b02a981314b4228ec99380cca - name: github.com/shurcooL/sanitized_anchor_name version: 1dba4b3954bc059efc3991ec364f9f9a35f597d2 - name: golang.org/x/net version: f315505cf3349909cdf013ea56690da34e96a451 subpackages: - context +- name: golang.org/x/sys + version: d75a52659825e75fff6158388dddc6a5b04f9ba5 + subpackages: + - unix - name: gopkg.in/go-playground/validator.v8 version: c193cecd124b5cc722d7ee5538e945bdb3348435 - name: gopkg.in/mgo.v2 @@ -56,7 +62,7 @@ imports: - name: gopkg.in/yaml.v2 version: a5b47d31c556af34a302ce5d659e6fea44d90de0 - name: qiniupkg.com/api.v7 - version: ad7023b87b2f5c169812da49fe44900be1c4e5c2 + version: 7cfd4b639917bf924d8c1cd17a6d61175e809066 subpackages: - api - auth/qbox diff --git a/qiniu.go b/qiniu.go index 1e873ad..c9de41e 100644 --- a/qiniu.go +++ b/qiniu.go @@ -1,13 +1,12 @@ package main import ( - "crypto/md5" + "errors" "fmt" - "io/ioutil" - "os" - "path" + "io" + "path/filepath" - "github.com/eiblog/utils/logd" + "github.com/eiblog/eiblog/setting" "qiniupkg.com/api.v7/conf" "qiniupkg.com/api.v7/kodo" "qiniupkg.com/api.v7/kodocli" @@ -20,12 +19,6 @@ type bucket struct { 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"` @@ -40,31 +33,19 @@ func onProgress(fsize, uploaded int64) { } } -func upload(typ string, filepath string) { - bucket := getBucket(typ) - if bucket == nil { - logd.Debug("invalid type:", typ) - return +func Upload(name string, size int64, data io.Reader) (string, error) { + if setting.Conf.Kodo.AccessKey == "" || setting.Conf.Kodo.SecretKey == "" { + return "", errors.New("qiniu config error") } - 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 + conf.ACCESS_KEY = setting.Conf.Kodo.AccessKey + conf.SECRET_KEY = setting.Conf.Kodo.SecretKey // 创建一个client c := kodo.New(0, nil) // 设置上传的策略 policy := &kodo.PutPolicy{ - Scope: bucket.name, + Scope: setting.Conf.Kodo.Name, Expires: 3600, InsertOnly: 1, } @@ -75,18 +56,30 @@ func upload(typ string, filepath string) { 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 + ext := filepath.Ext(name) + var key string + switch ext { + case ".bmp", ".png", ".jpg", ".gif", ".ico": + key = "blog/img/" + name + case ".mov", ".mp4": + key = "blog/video/" + name + case ".go", ".js", ".css", ".cpp", ".php", ".rb", ".java", ".py", ".sql", ".lua", ".html", ".sh", ".xml", ".cs": + key = "blog/code/" + name + case ".txt", ".md", ".ini", ".yaml", ".yml", ".doc", ".ppt", ".pdf": + key = "blog/document/" + name + case ".zip", ".rar", ".tar", ".gz": + key = "blog/archive/" + name + default: + return "", errors.New("不支持的文件类型") } - url := kodo.MakeBaseUrl(bucket.domain, key) - fmt.Printf("url: %s\n", url) + var ret PutRet + var extra = kodocli.PutExtra{OnProgress: onProgress} + err := uploader.Put(nil, &ret, token, key, data, size, &extra) + if err != nil { + return "", err + } + + url := kodo.MakeBaseUrl(setting.Conf.Kodo.Domain, ret.Key) + return url, nil } diff --git a/qiniu_test.go b/qiniu_test.go new file mode 100644 index 0000000..1994def --- /dev/null +++ b/qiniu_test.go @@ -0,0 +1,21 @@ +// Package main provides ... +package main + +import ( + "os" + "testing" +) + +func TestUpload(t *testing.T) { + path := "/Users/chen/Desktop/png-MicroService-by-StuQ.png" + file, err := os.Open(path) + if err != nil { + t.Fatal(err) + } + info, _ := file.Stat() + url, err := Upload(info.Name(), info.Size(), file) + if err != nil { + t.Fatal(err) + } + t.Log(url) +} diff --git a/static/feed.xml b/static/feed.xml new file mode 100755 index 0000000..3b8d6f9 --- /dev/null +++ b/static/feed.xml @@ -0,0 +1,13 @@ + + + + Deepzz's Blog + https://deepzz.com + 不抛弃,不放弃 + + + zh-CN + Sun, 18 Dec 2016 00:15:03 +0800 + + + diff --git a/static/opensearch.xml b/static/opensearch.xml new file mode 100755 index 0000000..b003a7b --- /dev/null +++ b/static/opensearch.xml @@ -0,0 +1,6 @@ + + + Deepzz's Blog + 不抛弃,不放弃 + + diff --git a/static/sitemap.xml b/static/sitemap.xml new file mode 100755 index 0000000..f15f004 --- /dev/null +++ b/static/sitemap.xml @@ -0,0 +1,16 @@ + + + + + https://deepzz.com/post/blogroll.html + 2016-12-17 + 0.6 + + + + https://deepzz.com/post/about.html + 2016-12-17 + 0.6 + + +