阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

golang实现文件上传并转存数据库功能详解

80次阅读
没有评论

共计 1632 个字符,预计需要花费 5 分钟才能阅读完成。

导读 这篇文章主要为大家详细介绍了 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 之间的转换。

整体框架:

一、接收文件 / 图片接口

二、修改 / 保存图片的接口

三、保存数据的方法

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1632字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中