GO 聊天IM系统(四)整合oos完成视频、图片等聊天资源的发送与储存

  1. 为什么上传到oos?

如果聊天记录中的图片和视频都储存在服务器当中的话,会大量的占用服务器储存空间

  1. 视频、图片等聊天资源以什么形式发送出去

已url的方式进行发送,在前端进行判断,找到相应资源并显示

两种方式:

1、通过服务器直接上传云服务器

2、网页向服务器发送请求获取云服务器签名,后直接上传到云服务器(可以降低自身服务器访问压力)

上传代码

func UploadOOS(c *gin.Context) {
    w := c.Writer
    req := c.Request
    srcFile, head, err := req.FormFile("file")
    if err != nil {
        utils.RespFail(w, err.Error())
    }
    suffix := ".png"
    ofilName := head.Filename
    tem := strings.Split(ofilName, ".")
    if len(tem) > 1 {
        suffix = "." + tem[len(tem)-1]
    }
    fileName := fmt.Sprintf("%d%04d%s", time.Now().Unix(), rand.Int31(), suffix)
    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    client, err := oss.New(viper.GetString("oss.Endpoint"), viper.GetString("oss.AccessKeyId"), viper.GetString("oss.AccessKeySecret"))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 填写存储空间名称,例如examplebucket。
    bucket, err := client.Bucket(viper.GetString("oss.Bucket"))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 依次填写Object的完整路径(例如exampledir/exampleobject.txt)和本地文件的完整路径(例如D:\\localpath\\examplefile.txt)。
    err = bucket.PutObject(fileName, srcFile)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    url := "http://" + viper.GetString("oos.Bucket") + "." + viper.GetString("oos.EndPoint") + "/" + fileName
    utils.RespOK(w, url, "发送图片成功")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值