快速開始api開發(六)檔案上傳,設定頭像

wuyan94zl發表於2022-08-22

檔案上傳配置

配置

修改:config.yaml

...
Container:
  Storage:
    Store: "oss"
    MaxFileSize: 1073741824
    Config:
      BucketName: ""
      Endpoint: ""
      AccessId: ""
      AccessSecret: ""
...

修改:config/config.go

package container

import (...)
// 增加配置
type Storage struct {
    Store       string
    MaxFileSize int64
    Config      storage.OSSConfig
}

type Config struct {
    DB      GormConfig
    Redis   RedisConfig
    Jwt     jwt.Config
    Storage Storage // 增加配置
}

type Container struct {
    DB        *gorm.DB
    Redis     *redis.Client
    Jwt       jwt.Config
    Storage   storage.Client // 增加配置
    UserModel user.UsersModel
}

func NewContainer(c Config) {
    dbConn, redisConn := dbConn(c.DB), redisConn(c.Redis)
    container = &Container{
        DB:        dbConn,
        Redis:     redisConn,
        Jwt:       c.Jwt,
        Storage:   storage.Parse(c.Storage.Store, c.Storage.MaxFileSize, c.Storage.Config), // 註冊
        UserModel: user.NewUsersModel(dbConn, redisConn),
    }
}

支援 本地:local、阿里雲:oss,騰訊雲:cos,七牛雲:qn 儲存方式的配置使用。
詳見 github.com/wuyan94zl/gotools/storage

頭像上傳

gotools handler --dir auth --method POST --name user/image

POST /auth/user/image

修改:app/handler/authuserimage.go

req := new(types.AuthUserImageRequest)
    resp, err := auth.UserImageLogic(c, req)
    // 刪除c.ShouldBindJSON 等部分
    if err != nil {
        c.JSON(200, response.Error(500, err))
        return
    }
    c.JSON(200, response.Success(resp))

修改:app/logic/auth/userimage.go

package auth

import (...)

func UserImageLogic(c *gin.Context, req *types.AuthUserImageRequest) (*types.AuthUserImageResponse, error) {
    id := c.MustGet("ID").(float64)
    info, err := container.Instance().UserModel.First(c.Copy(), int64(id)) // 認證使用者資訊
    // 圖片上傳,上面已經全域性註冊了,這裡直接使用
    imageUrl, err := container.Instance().Storage.Put(c.Request, "myImage", "head")
    if err != nil {
        return nil, err
    }
    info.HeadImg = imageUrl

    err = container.Instance().UserModel.Update(c.Copy(), info)
    if err != nil {
        return nil, err
    }
    return &types.AuthUserImageResponse{}, nil
}

結束

下節 elk 日誌

本作品採用《CC 協議》,轉載必須註明作者和本文連結
沒有造飛機的格局,怎麼能擰得好螺絲。

相關文章