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 }