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
package utils
import (
"bytes"
"encoding/base64"
"gin-vue-admin/global"
"io/ioutil"
"log"
"math/rand"
"os"
"path/filepath"
"regexp"
"strconv"
"time"
)
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func SetByteOss(Filename string, Value []byte) string {
// 创建OSSClient实例。
client, err := oss.New(global.GVA_CONFIG.AliyunOSS.Endpoint, global.GVA_CONFIG.AliyunOSS.AccessKeyId, global.GVA_CONFIG.AliyunOSS.AccessKeySecret)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 获取存储空间。
bucket, err := client.Bucket(global.GVA_CONFIG.AliyunOSS.BucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 指定存储类型为标准存储,缺省也为标准存储。
storageType := oss.ObjectStorageClass(oss.StorageStandard)
// 指定存储类型为归档存储。
// storageType := oss.ObjectStorageClass(oss.StorageArchive)
// 指定访问权限为公共读,缺省为继承bucket的权限。
objectAcl := oss.ObjectACL(oss.ACLPublicRead)
yunFileTmpPath := filepath.Join(global.GVA_CONFIG.AliyunOSS.Directory, time.Now().Format("2006-01-02")) + "/" + Filename
// 上传字符串。
err = bucket.PutObject(yunFileTmpPath, bytes.NewReader(Value), storageType, objectAcl)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
return global.GVA_CONFIG.AliyunOSS.BucketUrl + "/" + yunFileTmpPath
}
//写入文件,保存
func WriteFile(path string, base64_image_content string) bool {
b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, base64_image_content)
if !b {
return false
}
re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
allData := re.FindAllSubmatch([]byte(base64_image_content), 2)
fileType := string(allData[0][1]) //png ,jpeg 后缀获取
base64Str := re.ReplaceAllString(base64_image_content, "")
date := time.Now().Format("2006-01-02")
if ok := IsFileExist(path + "/" + date); !ok {
os.Mkdir(path+"/"+date, 0666)
}
curFileStr := strconv.FormatInt(time.Now().UnixNano(), 10)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
n := r.Intn(99999)
var file string = path + "/" + date + "/" + curFileStr + strconv.Itoa(n) + "." + fileType
byte, _ := base64.StdEncoding.DecodeString(base64Str)
err := ioutil.WriteFile(file, byte, 0666)
if err != nil {
log.Println(err)
}
return false
}
//判断文件是否存在
func IsFileExist(filename string) bool {
_, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return true
}