日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

golang實現文件上傳并轉存數據庫功能_Golang

作者:RazerZhang ? 更新時間: 2022-09-18 編程語言

本文實例為大家分享了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之間的轉換。

整體框架:

一、接收文件/圖片接口
二、修改/保存圖片的接口
三、保存數據的方法

原文鏈接:https://blog.csdn.net/weixin_53970851/article/details/119763499

欄目分類
最近更新