最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang實(shí)現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫功能

 更新時(shí)間:2022年07月26日 17:17:20   作者:RazerZhang  
這篇文章主要為大家詳細(xì)介紹了golang實(shí)現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了golang實(shí)現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫的具體代碼,供大家參考,具體內(nèi)容如下

需求

上傳圖片,且可選擇將圖片保存到數(shù)據(jù)中。

一、流程圖

二、步驟

1.上傳文件接口

獲取文件,并返回base64string流

代碼如下(示例):

func setIconPost(c *gin.Context) ?{
?? ?//獲取文件,icon實(shí)現(xiàn)對(duì)上傳文件的訪問,header是對(duì)上傳文件信息的標(biāo)記
?? ?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.存儲(chǔ)數(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.存儲(chǔ)的數(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時(shí)會(huì)報(bào)錯(cuò)。

Data too long for column '......' at row 1

解決方法

將數(shù)據(jù)庫字段格式設(shè)置為longtext

總結(jié)

本需求主要難點(diǎn)在于對(duì)于golang核心庫方法的掌握,包括上傳文件,[]bytes 和 string之間的轉(zhuǎn)換。

整體框架:

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go Gin 處理跨域問題解決

    Go Gin 處理跨域問題解決

    在前后端分離的項(xiàng)目中,經(jīng)常會(huì)遇到跨域問題,本文主要介紹了Go Gin 處理跨域問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 探索分析Go?HTTP?GET請(qǐng)求發(fā)送body

    探索分析Go?HTTP?GET請(qǐng)求發(fā)送body

    這篇文章主要為大家介紹了探索分析Go?HTTP?GET請(qǐng)求發(fā)送body,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • golang構(gòu)建HTTP服務(wù)的實(shí)現(xiàn)步驟

    golang構(gòu)建HTTP服務(wù)的實(shí)現(xiàn)步驟

    其實(shí)很多框架都是在 最簡單的http服務(wù)上做擴(kuò)展的的,基本上都是遵循h(huán)ttp協(xié)議,本文主要介紹了golang構(gòu)建HTTP服務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • golang實(shí)現(xiàn)命令行程序的使用幫助功能

    golang實(shí)現(xiàn)命令行程序的使用幫助功能

    這篇文章介紹了golang實(shí)現(xiàn)命令行程序使用幫助的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 詳解Go 結(jié)構(gòu)體格式化輸出

    詳解Go 結(jié)構(gòu)體格式化輸出

    這篇文章主要介紹了Go 結(jié)構(gòu)體格式化輸出的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)go語言,感興趣的朋友可以了解下
    2020-08-08
  • Go語言中strings和strconv包示例代碼詳解

    Go語言中strings和strconv包示例代碼詳解

    這篇文章主要介紹了Go語言中strings和strconv包示例代碼詳解 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • golang coroutine 的等待與死鎖用法

    golang coroutine 的等待與死鎖用法

    這篇文章主要介紹了golang coroutine 的等待與死鎖用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • go語言數(shù)組及結(jié)構(gòu)體繼承和初始化示例解析

    go語言數(shù)組及結(jié)構(gòu)體繼承和初始化示例解析

    這篇文章主要為大家介紹了go語言數(shù)組及結(jié)構(gòu)體繼承和初始化示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Go語言中命令行參數(shù)解析工具pflag的使用指南

    Go語言中命令行參數(shù)解析工具pflag的使用指南

    在使用?Go?進(jìn)行開發(fā)的過程中,命令行參數(shù)解析是我們經(jīng)常遇到的需求,于是?Go?社區(qū)中出現(xiàn)了一個(gè)叫?pflag?的第三方包,功能更加全面且足夠強(qiáng)大,下面我們就來看看它的具體使用吧
    2024-11-11
  • go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析

    go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析

    這篇文章主要為大家介紹了go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

昌邑市| 辽阳县| 定结县| 南昌市| 望谟县| 宿松县| 若尔盖县| 宣恩县| 班戈县| 辽宁省| 巢湖市| 湘乡市| 中方县| 上林县| 始兴县| 信阳市| 洛宁县| 海阳市| 桐庐县| 离岛区| 哈密市| 额敏县| 祁东县| 伊川县| 长治县| 牙克石市| 娱乐| 田东县| 五峰| 神农架林区| 巴楚县| 南昌市| 和政县| 莱阳市| 陆良县| 南康市| 麟游县| 芷江| 长岭县| 天柱县| 东海县|