路由

        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
}