feat: ossApi
This commit is contained in:
+156
@@ -0,0 +1,156 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"github.com/aliyun/aliyun-oss-go-sdk/oss"
|
||||
ctxLogger "github.com/luizsuper/ctxLoggers"
|
||||
"go.uber.org/zap"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type DetailInfoUrls struct {
|
||||
ID int `json:"id" gorm:"column:id"`
|
||||
Image string `json:"image" gorm:"column:image"`
|
||||
Cover string `json:"cover" gorm:"column:cover"`
|
||||
Mycover string `json:"mycover" gorm:"column:mycover"`
|
||||
Myimage string `json:"myimage" gorm:"column:myimage"`
|
||||
Sid string `json:"sid" gorm:"column:sid"`
|
||||
Sname string `json:"sname" gorm:"column:sname"`
|
||||
Done int `json:"done" gorm:"column:done"`
|
||||
ErrorInfo string `json:"errinfo" gorm:"column:errinfo"`
|
||||
ErrorImage string `json:"errorimage" gorm:"column:errorimage"`
|
||||
}
|
||||
|
||||
func (m *DetailInfoUrls) TableName() string {
|
||||
return "detail_info_urls"
|
||||
}
|
||||
|
||||
type Error struct {
|
||||
Sid string `json:"sid" gorm:"column:sid"`
|
||||
ID int `json:"id" gorm:"column:id"`
|
||||
Url string `json:"url" gorm:"column:url"`
|
||||
Type int `json:"type" gorm:"column:type"`
|
||||
Msg string `json:"msg" gorm:"column:msg"`
|
||||
CreateTime time.Time `json:"create_time" gorm:"column:create_time"`
|
||||
}
|
||||
|
||||
func (m *Error) TableName() string {
|
||||
return "error"
|
||||
}
|
||||
|
||||
const EndPoint = `oss-cn-hangzhou.aliyuncs.com`
|
||||
|
||||
func s(name, url string) error {
|
||||
// 创建OSSClient实例。
|
||||
client, err := oss.New(EndPoint, "LTAI5tJHzAYoXL7ZNrZwKGoz", "QfL9kWUOMiswz7dk4PbTEy4jukm5YD")
|
||||
if err != nil {
|
||||
ctxLogger.Error(nil, "create oss client err", zap.String("err reason", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
// 获取存储空间。
|
||||
bucket, err := client.Bucket("ganesh-pic")
|
||||
if err != nil {
|
||||
ctxLogger.Error(nil, "get bucket err", zap.String("err reason", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
picBytes, err := getPic(url)
|
||||
if err != nil {
|
||||
ctxLogger.Error(nil, "get bucket err", zap.String("err reason", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
err = bucket.PutObject(name, bytes.NewReader(picBytes))
|
||||
if err != nil {
|
||||
ctxLogger.Error(nil, "get bucket err", zap.String("err reason", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getPic(url string) ([]byte, error) {
|
||||
client := &http.Client{}
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp, err := client.Do(req)
|
||||
defer func(Body io.ReadCloser) {
|
||||
err := Body.Close()
|
||||
if err != nil {
|
||||
ctxLogger.Error(nil, "net body close error", zap.String("errReason", err.Error()))
|
||||
}
|
||||
}(resp.Body)
|
||||
return ioutil.ReadAll(resp.Body)
|
||||
}
|
||||
|
||||
func k(start, end int) {
|
||||
const (
|
||||
coverSuffix = `wujian`
|
||||
contentSuffix = `content`
|
||||
coverType = 0
|
||||
contentType = 1
|
||||
other = 2
|
||||
)
|
||||
//错误次数,等于30退出程序
|
||||
errNum := 0
|
||||
//数据源
|
||||
d := new([]DetailInfoUrls)
|
||||
//给图片进行md5加密
|
||||
md5Name := func(name string) string {
|
||||
h := md5.New()
|
||||
h.Write([]byte(name))
|
||||
return hex.EncodeToString(h.Sum(nil))
|
||||
}
|
||||
//insetError
|
||||
insertErr := func(sid, url, msg string, types int) {
|
||||
DB.Create(&Error{
|
||||
Sid: sid,
|
||||
Url: url,
|
||||
Type: types,
|
||||
Msg: msg,
|
||||
})
|
||||
errNum++
|
||||
}
|
||||
if err := DB.Where("id >= ? and id <= ?", start, end).Find(d).Error; err != nil {
|
||||
if errNum == 100 {
|
||||
os.Exit(0)
|
||||
}
|
||||
insertErr("999", "", err.Error(), other)
|
||||
}
|
||||
for _, v := range *d {
|
||||
myContent := ``
|
||||
if errNum == 100 {
|
||||
os.Exit(0)
|
||||
}
|
||||
md5Cover := md5Name(v.Sname + coverSuffix)
|
||||
if err := s(md5Cover, v.Cover); err != nil {
|
||||
insertErr(v.Sid, v.Cover, err.Error(), coverType)
|
||||
}
|
||||
if spilt := strings.Split(v.Image, `@`); len(spilt) != 0 {
|
||||
for k, contentUrl := range spilt {
|
||||
md5Content := md5Name(v.Sname + contentSuffix + strconv.Itoa(k))
|
||||
if err := s(md5Content, contentUrl); err == nil {
|
||||
myContent = fmt.Sprintf("%v%v@", myContent, md5Content)
|
||||
} else {
|
||||
insertErr(v.Sid, contentUrl, err.Error(), contentType)
|
||||
}
|
||||
}
|
||||
v.Myimage = myContent
|
||||
} else {
|
||||
insertErr(v.Sid, v.Image, "split len ==0", other)
|
||||
}
|
||||
DB.Debug().Model(&v).Updates(DetailInfoUrls{Done: 1, Mycover: md5Cover, Myimage: string([]byte(myContent)[0 : len([]byte(myContent))-1])})
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOss(t *testing.T) {
|
||||
//s("test.jpg","https://miquan-play.oss-cn-shenzhen.aliyuncs.com/platformScriptImg/29/1.jpg")
|
||||
ossUrlSend()
|
||||
|
||||
}
|
||||
|
||||
func ossUrlSend() {
|
||||
k(13906, 13906)
|
||||
}
|
||||
Reference in New Issue
Block a user