golang實現檔案上傳並轉存資料庫功能詳解

大雄45發表於2022-08-11
導讀 這篇文章主要為大家詳細介紹了golang實現檔案上傳並轉存資料庫功能,文中示例程式碼介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下

本文例項為大家分享了golang實現檔案上傳並轉存資料庫的具體程式碼,供大家參考,具體內容如下

需求

上傳圖片,且可選擇將圖片儲存到資料中。

一、流程圖

golang實現檔案上傳並轉存資料庫功能詳解golang實現檔案上傳並轉存資料庫功能詳解

二、步驟
1.上傳檔案介面

獲取檔案,並返回base64string流

程式碼如下(示例):

func setIconPost(c *gin.Context)  {
    //獲取檔案,icon實現對上傳檔案的訪問,header是對上傳檔案資訊的標記
    icon,header,err :=c.Request.FormFile("file")
    dangerous(err)
    defer icon.Close()
    //path.Ext是取字尾,Tolower小寫
    ext := strings.ToLower(path.Ext(header.Filename))
    if header.Size>1024*1024*2{
        fmt.Println("檔案過大")
    }
    buf := bytes.NewBuffer(nil)
    //讀取icon的資料存入buf中
    if _,err := io.Copy(buf,icon);err != nil{
        return
    }
    //將base64返回前端
    renderData(c, gin.H{
        "base64":base64.StdEncoding.EncodeToString(buf.Bytes()),
        "icon-ext":ext,
    },nil)
}
2.儲存資料

程式碼如下(示例):

func setEntPost(c *gin.Context)  {
    var f Identical
    bind(c,&f)
    models.EtpSave(f.Copyright,"copyright")
    models.EtpSave(f.Introduction,"introduction")
    models.EtpSave(f.Icon,"icon")
    models.EtpSave(f.Logo,"logo")
    models.EtpSave(f.Version,"version")
    models.EtpSave(f.Belong,"belong")
    renderMessage(c,nil)
}
3.儲存的資料庫操作
type Etp struct {
    Id    int         `json:"id"`
    Ckey  string     `json:"ckey"`
    Cval  string    `json:"cval"`
    Kind  int         `json:"kind"`
}
func EtpSave(cval, ckey string) error {
    var obj Etp
    //資料庫是否存在
    has,err := DB["rdb"].Table("configs").Where("ckey=?",ckey).Get(&obj)
    if err != nil{
        return err
    }
    //不存在
    if !has {
        _, err = DB["rdb"].Table("configs").Where("ckey=?",ckey).Insert(Etp{
            Ckey: ckey,
            Cval: cval,
            Kind: 1,
        })
    }else{
        obj.Cval = cval
        DB["rdb"].Table("configs").Where("ckey=?",ckey).Cols("cval").Update(&obj)
    }
    return err
}
4.最佳化

若上傳圖片稍大,在轉存MySQL時會報錯。Data too long for column '......' at row 1

解決方法

將資料庫欄位格式設定為longtext

總結

本需求主要難點在於對於golang核心庫方法的掌握,包括上傳檔案,[]bytes 和 string之間的轉換。

整體框架:

一、接收檔案/圖片介面

二、修改/儲存圖片的介面

三、儲存資料的方法

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2909925/,如需轉載,請註明出處,否則將追究法律責任。

相關文章