Go+beego接入OSS上传

路由

        f, h, err := c.GetFile("uploadFile")
        if err != nil {
                logx.Error("getfile err ", err)
                rq.ThrowErrorMessage("未找到文件")
                return
        }
        
        //存到服务器的地址
        filePath := "static/upload/" + h.Filename
        defer func() {
                f.Close()
                os.Remove(filePath)
        }()

        // 保存位置在 static/upload, 没有文件夹要先创建
        c.SaveToFile("uploadFile", filePath) 

        res, err := aliclound.UploadAvatar(filePath)
        if err != nil {
                rq.ThrowErrorMessage("上传失败-1,请联系小客服")
                return
        }
        
        //写表
        log := models.TImage{
                PosterId: int(rq.UserId),
                PostTime: time.Now(),
                FileName: res,
                Type:     "user_avatar",
        }
        _, err = core.DB().Insert(log)
        if err != nil {
                logx.Error("插入头像失败:" + err.Error())
                rq.ThrowErrorMessage("上传失败-2,请联系小客服")
                return
        }

传到oss

需要的库:"github.com/aliyun/aliyun-oss-go-sdk/oss"

const (
        Object_Avatar = "prod/image/"
)

func UploadAvatar(filePath string) (string, error) {
        return upload(Object_Avatar, filePath)
}

func upload(objectName string, filePath string) (fileName string, err error) {
        // 创建OSSClient实例。
        // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        client, err := oss.New("", "", "")
        if err != nil {
                fmt.Println("aliclound:upload:Error1:", err)
                return fileName, err
        }

        bucketName := "test"
        if core.CheckServerMode() {
                bucketName = "server"
        }

        // 填写存储空间名称,例如examplebucket。
        bucket, err := client.Bucket(bucketName)
        if err != nil {
                fmt.Println("aliclound:upload:Error2:", err)
                return fileName, err
        }

        //随机文件名
        fileName = convert.GetDay() + "-" + util.UUID()

        // 依次填写Object的完整路径(例如exampledir/exampleobject.txt)
        // 本地文件的完整路径(服务器上存图片的路径)。
        err = bucket.PutObjectFromFile(objectName+fileName, filePath)
        if err != nil {
                fmt.Println("aliclound:upload:Error3:", err)
                return fileName, err
        }
        return fileName, err
}