为什么上传到oos?
如果聊天记录中的图片和视频都储存在服务器当中的话,会大量的占用服务器储存空间
视频、图片等聊天资源以什么形式发送出去
已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, "发送图片成功")
}