Gin框架使用OSS存储上传文件(图片/视频)

1,218 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

Gin框架介绍

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。如果你需要极好的性能,使用 Gin 吧。可以这样理解:Gin就是一个封装好的http框架。

上传文件

总体流程:接收文件后,创建一个创建OSSClient实例,填写好相应的个人信息后,指定存储空间,就可以把本地的文件上传了。

接收文件

这里需要前端上传文件的表单的enctype属性指定值为multipart/form-data

最早的HTTP是不支持文件上传的,后面为了开发,Content-Type的类型扩充了multipart/form-data用以支持向服务器发送二进制数据。因此发送post请求时候,form表单属性enctype共有二个值可选,这个属性管理的是表单的MIME编码:

①application/x-www-form-urlencoded(默认值) ②multipart/form-data 这里我们选择第二个编码方式。

代码:

func UpLoadFile(c *gin.Context) {
​
    f, err := c.FormFile("data") // multipart/form-data
}

创建OSSClient实例

 // 创建OSSClient实例。  
Endpoint := "https://cn-shenzhen.oss.aliyuncs.com"  //  yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。 
    AccessKeyID := "xxxxx"           //填写你的AccessKeyID
    AccessKeySecret := "xxxxx" //AccessKeySecret
    client, err := oss.New(Endpoint, AccessKeyID, AccessKeySecret)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
​

填写存储空间名称

// 指定bucket
    bucket, err := client.Bucket("jxau7124") // 根据自己的填写
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
​
    }

指定路径

依次填写Object的完整路径(例如exampledir/exampleobject.txt)和本地文件的完整路径(例如D:\localpath\examplefile.txt)。

    // 将文件流上传至指定目录下
    path := video.user.Name + "/" + video.title + file.Filename
​
    err = bucket.PutObject(path, src)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
​
    }

然后就可以进行访问了

访问路径:

https://桶名+oss-cn-服务器所在城市名+.aliyuncs.com/+存储路径

缩略图

一般我们上传完图片或者视频后想要得到一张缩略图,这一块oss也帮我们封装好了。

在图片的地址后面加上以下代码,可以生成缩略图

?x-oss-process=image/resize,m_fill,w_200,quality,q_60

在视频的地址后面加上以下代码,可以获取视频的封面

?x-oss-process=video/snapshot,t_7000,f_jpg,w_800,h_600,m_fast

注意:

resize ——调整大小

quality ——清晰度0-100

w_200,h_540——图片的宽度及高度