Go语言+阿里云OSS存储
Go语言实现阿里云OSS图片存储
·
本文主要在Go语言基础上实现阿里云OSS存储
一、阿里云存储库配置
1.打开阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 阿里云官网登录
2.登录后点击首页左侧 对象存储oss 
3.新建Bucket
填写Bucket名称即可 目前无法修改公共访问权限 可以新建之后再修改权限
4.获取Bucket信息以及Access密钥
刚才的Bucket创建好之后点击名称即可跳转至以下界面,点击概览 获取详细信息
继续往下翻可以获取到Endpoint地域节点信息
最后页面右上角个人中心查看AccessKey信息
二、Go项目配置
1. oss配置 这里的信息就是我们上一步获取到的信息
oss:
accessKeyId: xxxxx
accessKeySecret: xxxxx
bucketName:xxxx
endpoint: xxxxx
2.代码
package controllers
import (
"github.com/aliyun/aliyun-oss-go-sdk/oss"
_ "github.com/aliyun/aliyun-oss-go-sdk/oss"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"log"
"net/http"
"path/filepath"
"pet_server/config"
"time"
)
func UploadFile(c *gin.Context) {
// 1. 获取上传文件
file, err := c.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "文件获取失败"})
return
}
// 2. 打开文件
src, err := file.Open()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "文件打开失败"})
return
}
defer src.Close()
// 3. 生成唯一文件名
ext := filepath.Ext(file.Filename)
filename := generateFileName(ext)
// 4. 初始化OSS客户端并获取Bucket
client, err := oss.New(config.AppConfig.Oss.Endpoint, config.AppConfig.Oss.AccessKeyId, config.AppConfig.Oss.AccessKeySecret)
if err != nil {
log.Printf("OSS客户端初始化失败: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{"error": "服务不可用"})
return
}
bucketName := config.AppConfig.Oss.BucketName
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Printf("获取Bucket失败: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{"error": "服务不可用"})
return
}
// 5. 上传文件到OSS
err = bucket.PutObject(filename, src)
if err != nil {
log.Printf("OSS上传失败: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{"error": "文件上传失败"})
return
}
// 6. 返回访问URL
url := "https://" + bucketName + "." + config.AppConfig.Oss.Endpoint + "/" + filename
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": gin.H{
"url": url,
"size": file.Size,
"name": filename,
},
})
}
// 生成唯一文件名
func generateFileName(ext string) string {
return time.Now().Format("PetFosterCare") + "-" + uuid.New().String() + ext
}
更多推荐
所有评论(0)