废话不多说直接上代码
前提条件你需要下载COS的SDK
go get -u github.com/tencentyun/cos-go-sdk-v5
ps:以下代码是用gin框架,这里主要是对这上传头像的使用 其他的逻辑就直接省略了。
//修改头像
func changeAvatar(ctx *gin.Context) {
img, err := ctx.FormFile("avatar")
//大小限制2Mb
if img.Size > (2 << 20) {
tool.RespErrorWithData(ctx, "头像文件过大")
return
}
file, err := img.Open()
filePath := "/avatar/" + tool.CreateUUID() + "." + strings.Split(img.Filename, `.`)[1]
//上传头像
err = service.UploadAvatar(file, filePath)
if err != nil {
fmt.Println("UploadAvatarErr: ", err)
tool.RespInternalError(ctx)
return
}
//以下代码可以省略
cfg := tool.GetCfg().Cos
url := cfg.AvatarUrl + filePath
//头像入数据库
err = service.ChangeAvatar(url, Id)
if err != nil {
fmt.Println("changeAvatar_ChangeAvatar Err is: ", err)
tool.RespInternalError(ctx)
return
}
ctx.JSON(200, gin.H{
"data": "修改成功",
"avatar": url,
})
}
service.UploadAvatar
func UploadAvatar(file io.Reader, filePath string) error {
cfg := tool.GetCfg().Cos
u, _ := url.Parse(cfg.AvatarUrl)
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
// 设置超时时间
Timeout: 30 * time.Second,
Transport: &cos.AuthorizationTransport{
SecretID: cfg.SecretId,
SecretKey: cfg.SecretKey,
},
})
_, err := c.Object.Put(context.Background(), filePath, file, nil)
if err != nil {
return err
}
return nil
}
cfg.AvatarUrl 是你的储存桶的地址
cfg.SecretId cfg.SecretKey 是你账号的ID和密钥