/
utils.go
117 lines (98 loc) · 2.15 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package main
import (
"bufio"
"crypto/md5"
"crypto/rand"
"encoding/hex"
"errors"
"github.com/sirupsen/logrus"
r "math/rand"
"os"
"path"
"path/filepath"
"time"
)
func MkDir(filepath string) error {
if _, err := os.Stat(filepath); err != nil {
if os.IsNotExist(err) {
err = os.MkdirAll(filepath, os.ModePerm)
if err != nil {
return err
}
} else {
return err
}
}
return nil
}
func CreateFile(dir string, name string) (string, error) {
src := path.Join(dir, name)
_, err := os.Stat(src)
if os.IsExist(err) {
return src, nil
}
if err := os.MkdirAll(dir, 0777); err != nil {
if os.IsPermission(err) {
return "", errors.New("你不够权限创建文件")
}
return "", err
}
_, err = os.Create(src)
if err != nil {
return "", err
}
return src, nil
}
func WriteFile(file string, text []byte) error {
f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0660)
if err != nil {
return err
}
defer f.Close()
w := bufio.NewWriter(f)
_, err = w.Write(text)
if err != nil {
return err
}
return w.Flush()
}
// RandomCreateBytes generate random []byte by specify chars.
func RandomCreateBytes(n int, alphabets ...byte) []byte {
if len(alphabets) == 0 {
alphabets = []byte(`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`)
}
var bytes = make([]byte, n)
var randBy bool
if num, err := rand.Read(bytes); num != n || err != nil {
r.Seed(time.Now().UnixNano())
randBy = true
}
for i, b := range bytes {
if randBy {
bytes[i] = alphabets[r.Intn(len(alphabets))]
} else {
bytes[i] = alphabets[b%byte(len(alphabets))]
}
}
return bytes
}
// Xmd5 计算字符串的md5值
func Xmd5(text string) string {
ctx := md5.New()
ctx.Write([]byte(text))
return hex.EncodeToString(ctx.Sum(nil))
}
func storeResult(filename string, data []byte) string {
basePath := os.Getenv("DATA_PATH")
if basePath == "" {
basePath = ".data"
}
fpath := filepath.Join(basePath, "tmp", filename)
MkDir(filepath.Dir(fpath))
err := WriteFile(fpath, data)
if err != nil {
logrus.WithError(err).Errorf("写入结果文件【%s】失败", filepath.Join(basePath, filename))
return ""
}
return fpath
}