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

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

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

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

需求

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

一、流程圖

二、步驟

1.上傳文件接口

獲取文件,并返回base64string流

代碼如下(示例):

func setIconPost(c *gin.Context) ?{
?? ?//獲取文件,icon實(shí)現(xiàn)對(duì)上傳文件的訪問(wèn),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("文件過(guò)大")
?? ?}
?? ?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ù)庫(kù)操作

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ù)庫(kù)是否存在
?? ?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ù)庫(kù)字段格式設(shè)置為longtext

總結(jié)

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

整體框架:

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

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

相關(guān)文章

  • Go Gin 處理跨域問(wèn)題解決

    Go Gin 處理跨域問(wèn)題解決

    在前后端分離的項(xiàng)目中,經(jīng)常會(huì)遇到跨域問(wèn)題,本文主要介紹了Go Gin 處理跨域問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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í)很多框架都是在 最簡(jiǎn)單的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)命令行程序使用幫助的方法,文中通過(guò)示例代碼介紹的非常詳細(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語(yǔ)言,感興趣的朋友可以了解下
    2020-08-08
  • Go語(yǔ)言中strings和strconv包示例代碼詳解

    Go語(yǔ)言中strings和strconv包示例代碼詳解

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

    golang coroutine 的等待與死鎖用法

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

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

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

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

    在使用?Go?進(jìn)行開(kāi)發(fā)的過(guò)程中,命令行參數(shù)解析是我們經(jīng)常遇到的需求,于是?Go?社區(qū)中出現(xiàn)了一個(gè)叫?pflag?的第三方包,功能更加全面且足夠強(qiáng)大,下面我們就來(lái)看看它的具體使用吧
    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)論

桂东县| 岳西县| 赣榆县| 常宁市| 临高县| 商丘市| 龙里县| 江永县| 甘南县| 军事| 通渭县| 宜宾市| 平远县| 余干县| 铁岭县| 周至县| 五河县| 澳门| 湖州市| 珲春市| 河津市| 聂拉木县| 高台县| 留坝县| 景洪市| 新民市| 腾冲县| 池州市| 习水县| 开鲁县| 平原县| 汉中市| 潞城市| 潞西市| 视频| 新余市| 黄陵县| 韩城市| 东港市| 阜南县| 湘阴县|