mirror of https://github.com/IoTcat/auxpi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.2 KiB
144 lines
3.2 KiB
// Copyright (c) 2019 aimerforreimu. All Rights Reserved. |
|
// Use of this source code is governed by a BSD-style |
|
// license that can be found in the LICENSE file. |
|
// |
|
// GNU GENERAL PUBLIC LICENSE |
|
// Version 3, 29 June 2007 |
|
// |
|
// Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> |
|
// Everyone is permitted to copy and distribute verbatim copies |
|
// of this license document, but changing it is not allowed. |
|
// |
|
// repo: https://github.com/aimerforreimu/auxpi |
|
|
|
package bootstrap |
|
|
|
import ( |
|
"crypto/md5" |
|
"encoding/base64" |
|
"encoding/hex" |
|
"log" |
|
"math/rand" |
|
"os" |
|
"path/filepath" |
|
"strings" |
|
"time" |
|
|
|
"github.com/astaxie/beego" |
|
"github.com/astaxie/beego/logs" |
|
"github.com/gofrs/uuid" |
|
) |
|
|
|
func GetPath() string { |
|
dir, err := filepath.Abs(filepath.Dir(os.Args[0])) //返回绝对路径 filepath.Dir(os.Args[0])去除最后一个元素的路径 |
|
if err != nil { |
|
log.Fatal(err) |
|
} |
|
return strings.Replace(dir, "\\", "/", -1) //将\替换成/ |
|
} |
|
|
|
func Decode(enc *base64.Encoding, str string) string { |
|
data, err := enc.DecodeString(str) |
|
|
|
if err != nil { |
|
panic(err) |
|
} |
|
return string(data) |
|
} |
|
|
|
func Encode(enc *base64.Encoding, str string) string { |
|
bData := []byte(str) |
|
data := enc.EncodeToString(bData) |
|
return string(data) |
|
} |
|
|
|
func FormatSoftLink(url *string) { |
|
n := len(*url) |
|
rs := []rune(*url) |
|
s := string(rs[n-1 : n]) |
|
if s == "/" { |
|
*url = string(rs[0 : n-1]) |
|
} |
|
s = string(rs[0:1]) |
|
if s != "/" { |
|
*url = "/" + string(rs[0:n]) |
|
} |
|
} |
|
|
|
func FormatStoreLocation(location *string) { |
|
n := len(*location) |
|
rs := []rune(*location) |
|
s := string(rs[n-1 : n]) |
|
if s != "/" { |
|
*location += "/" |
|
} |
|
s = string(rs[0:1]) |
|
if s == "/" { |
|
*location = string(rs[1:n]) |
|
} |
|
} |
|
|
|
func GetRandomString(l int, str string) string { |
|
bytes := []byte(str) |
|
result := []byte{} |
|
r := rand.New(rand.NewSource(time.Now().UnixNano())) |
|
for i := 0; i < l; i++ { |
|
result = append(result, bytes[r.Intn(len(bytes))]) |
|
} |
|
return string(result) |
|
} |
|
|
|
//检查路径并且创建 |
|
func CheckPath(path string) { |
|
//base := bootstrap.GetPath() |
|
if _, err := os.Stat(path); err != nil { |
|
err = os.MkdirAll(path, 0775) |
|
if err != nil { |
|
logs.Alert("Create Images store unsuccessful:", err) |
|
return |
|
} |
|
} |
|
} |
|
|
|
//格式化 url |
|
func FormatUrl(url *string) { |
|
n := len(*url) |
|
rs := []rune(*url) |
|
s := string(rs[n-1 : n]) |
|
if s != "/" { |
|
*url += "/" |
|
} |
|
s = string(rs[0:1]) |
|
if s == "/" { |
|
*url = string(rs[1:n]) |
|
} |
|
} |
|
|
|
//获取图片后G缀 |
|
func GetImageSuffix(name string) (suffix string) { |
|
ss := strings.Split(name, ".") |
|
l := len(ss) |
|
//选取最后一个 |
|
return ss[l-1] |
|
} |
|
|
|
//生成带有年月日的图片名称 2019/4/29/{hash}.suffix |
|
func GenerateImageName(name string) string { |
|
nowTime := beego.Date(time.Now(), "Y/m/d/") |
|
suffix := GenerateNormalString(16) + "." + GetImageSuffix(name) |
|
return nowTime + suffix |
|
} |
|
|
|
//生成 a-zA-Z0-9 的指定长度的随机字符串 |
|
func GenerateNormalString(l int) string { |
|
return GetRandomString(l, "zxcvbnmasdfghjklqwertyuiop1234567890ZXCVBNMLKJHGFDSAQWERTYUIOP") |
|
} |
|
|
|
//生成 md5 加密以后的 uuid(唯一字符串) |
|
func GenerateUniqueString() string { |
|
u, _ := uuid.NewV4() |
|
id := u.Bytes() |
|
h := md5.New() |
|
h.Write(id) |
|
return hex.EncodeToString(h.Sum(nil)) |
|
}
|
|
|