赞
踩
OSS指的是对象存储服务,是一种用于存储和检索大量非结构化数据(例如图片、视频等)的云计算服务。OSS提供了高可用性、可扩展性和安全性,并且可以通过互联网进行访问。
对象存储服务通常以存储桶(Bucket)和对象(Object)的形式组织数据。存储桶是存储的容器,类似于文件夹,而对象是存储的实际数据,可以是任意类型的文件或数据。
先去控制台中找到对象存储oss
进入到Bucket列表中
开始自定义创建一个新的 Bucket列表
接着去创建AccessKey用于后期上传图片的时候,进行身份验证
进入后创建一个新的AccessKey,一定要保存好对应的accessKeySecret
,因为这个值只有在创建的时候能看见!!!
前期工作都准备好了,现在就可以开始写代码了
client, err := oss.New(endpoint, accessKeyID, accessKeySecret)
if err != nil {
fmt.Println("Error:", err)
return
}
也就是要获取到你的Bucket列表
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
return
}
里面两个参数:第一个是文件的路径,第二个是文件的信息
err = bucket.PutObject(objectKey, imginfor)
if err != nil {
fmt.Println("Error:", err)
return
}
第一个参数:图片链接
第三个参数:过期时间
signedURL, err := bucket.SignURL(objectKey, oss.HTTPGet, 31536000000)
if err != nil {
fmt.Println(err.Error())
}
上面的几步是核心流程,但是在实际处理中肯定还要有一些小细节要处理,比如创建新的文件夹存储,文件重命名等信息
下面展示一下,我实现的完整流程。
func main() { r := gin.Default() r.POST("index", func(context *gin.Context) { form, _ := context.MultipartForm() // 将请求体中 multipart/form-data 格式的数据解析为一个对象 files := form.File["name"] // 获取对象中名为 name 的所有文件 for _, file := range files { imgname := file.Filename imgtypes := strings.Split(imgname, ".") imgtype := imgtypes[len(imgtypes)-1] newimg := imgName() + imgtype upload(newimg, file) } }) r.Run(":8080") } func upload(filename string, s1 *multipart.FileHeader) { // 配置 OSS 访问信息 accessKeyID := "LTA***" accessKeySecret := "ijKO6***" endpoint := "oss***" // 你的OSS服务访问域名 bucketName := "***" // 创建 OSS 客户端 client, err := oss.New(endpoint, accessKeyID, accessKeySecret) if err != nil { fmt.Println("Error:", err) return } // 获取存储空间 bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) return } // 构建年月日文件夹路径 today := time.Now().Format("20060102") // 格式化为年月日 objectKey := today + "/" + filename // 检查文件夹是否存在,不存在则创建 isExist, err := bucket.IsObjectExist(today + "/") if err != nil { fmt.Println("Error:", err) return } if !isExist { err := bucket.PutObject(today+"/", strings.NewReader("")) if err != nil { fmt.Println("Error:", err) return } } imginfor, err := s1.Open() if err != nil { fmt.Println(err.Error()) return } // 上传图片 err = bucket.PutObject(objectKey, imginfor) if err != nil { fmt.Println("Error:", err) return } // 生成永久有效的访问链接 signedURL, err := bucket.SignURL(objectKey, oss.HTTPGet, 31536000000) if err != nil { fmt.Println(err.Error()) } fmt.Println(signedURL) fmt.Println("Upload success!") } func imgName() string { // 获取当前时间的纳秒部分 nano := time.Now().UnixNano() // 生成随机数种子 rand.Seed(time.Now().UnixNano()) // 生成随机数 randomNum := rand.Intn(10000) // 构建唯一文件名 fileName := fmt.Sprintf("%d_%d", nano, randomNum) return fileName + "." }
1. 低成本:相比传统的我们把文件资源直接存储到项目的目录下,如果资源过多,会占用大量的空间,项目如果要迁移,每次还要把这些大量的文件一同迁移走。如果采用oss存储,存储一次后,保存路径,后期随时可调用。
2. 安全性:oss存储数据也相对很安全,oss提供数据加密、访问控制和身份验证登安全功能,保护了数据的机密性和安全性。
3. 可扩展性:oss具有无限的扩展性,能存储大规模数据,而传统的文件系统可能会受到存储容量的限制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。