golang實現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫功能
本文實例為大家分享了golang實現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫的具體代碼,供大家參考,具體內(nèi)容如下
需求
上傳圖片,且可選擇將圖片保存到數(shù)據(jù)中。
一、流程圖
二、步驟
1.上傳文件接口
獲取文件,并返回base64string流
代碼如下(示例):
func setIconPost(c *gin.Context) ?{ ?? ?//獲取文件,icon實現(xiàn)對上傳文件的訪問,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的數(shù)據(jù)存入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.存儲數(shù)據(jù)
代碼如下(示例):
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.存儲的數(shù)據(jù)庫操作
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 ?? ?//數(shù)據(jù)庫是否存在 ?? ?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.優(yōu)化
若上傳圖片稍大,在轉(zhuǎn)存MySQL時會報錯。
Data too long for column '......' at row 1
解決方法
將數(shù)據(jù)庫字段格式設置為longtext
總結(jié)
本需求主要難點在于對于golang核心庫方法的掌握,包括上傳文件,[]bytes 和 string之間的轉(zhuǎn)換。
整體框架:
一、接收文件/圖片接口
二、修改/保存圖片的接口
三、保存數(shù)據(jù)的方法
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。