系统(四)整合oos完成视频、图片等聊天资源的发送与储存"/>
GO 聊天IM系统(四)整合oos完成视频、图片等聊天资源的发送与储存
为什么上传到oos?
如果聊天记录中的图片和视频都储存在服务器当中的话,会大量的占用服务器储存空间
视频、图片等聊天资源以什么形式发送出去
已url的方式进行发送,在前端进行判断,找到相应资源并显示
两种方式:
1、通过服务器直接上传云服务器
2、网页向服务器发送请求获取云服务器签名,后直接上传到云服务器(可以降低自身服务器访问压力)
上传代码
func UploadOOS(c *gin.Context) {w := c.Writerreq := c.RequestsrcFile, head, err := req.FormFile("file")if err != nil {utils.RespFail(w, err.Error())}suffix := ".png"ofilName := head.Filenametem := 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(杭州)为例,填写为。其它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") + "/" + fileNameutils.RespOK(w, url, "发送图片成功")
}
更多推荐
GO 聊天IM系统(四)整合oos完成视频、图片等聊天资源的发送与储存
发布评论