【OSS存储】阿里云的oss存储服务 golang的API调用
文章目录
- 前言
- OSS是什么?
- 一、单体应用和微服务下的图片存储
- 1.单体应用的图片存储
- 2.微服务下的图片存储
- 二、阿里云(oss)使用步骤
- 三、使用代码控制文件上传
- 1.安装查看SDK版本
- 2.上传一个文件
- 四、前端直传oss的流程
- 五、gin集成前端直传文件
前言
OSS是什么?
阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。
非常适合存储非结构化数据,例如视频、图形、日志、文本文件以及各种App应用、多终端同步软件、网盘下载站的文件等,单个文件的大小从1字节到48.8TB,可以存储的个数无限制。
一、单体应用和微服务下的图片存储
1.单体应用的图片存储

2.微服务下的图片存储

二、阿里云(oss)使用步骤
傻瓜式操作就完事
- 阿里云官方注册账号
- 开通oss服务 如果首次使用 - 手动开通,会让你做实名认证
- 创建存储空间 - bucket
- 上传、下载、删除文件
三、使用代码控制文件上传
官方文档:https://help.aliyun.com/document_detail/32143.html
官方项目:https://github.com/aliyun/aliyun-oss-go-sdk
1.安装查看SDK版本
运行以下代码查看OSS Go SDK版本:
package mainimport ("fmt""github.com/aliyun/aliyun-oss-go-sdk/oss"
)func main() {fmt.Println("OSS Go SDK Version: ", oss.Version)
}
2.上传一个文件
建议使用阿里云子账户只授权oss存储服务来获取key
package main
import ("fmt""github.com/aliyun/aliyun-oss-go-sdk/oss""os"
)
func handleError(err error) {fmt.Println("Error:", err)os.Exit(-1)
}
func main() {// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。endpoint := "https://oss-cn-hangzhou.aliyuncs.com"// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。accessKeyId := "********"accessKeySecret := "*************"// yourBucketName填写存储空间名称。bucketName := "mxshop-nilsfiles"// yourObjectName填写Object完整路径,完整路径不包含Bucket名称。objectName := "test/first.jpg"// yourLocalFileName填写本地文件的完整路径。localFileName := "E:\\zhuomian\\ad.png"// 创建OSSClient实例。client, err := oss.New(endpoint, accessKeyId, accessKeySecret)if err != nil {handleError(err)}// 获取存储空间。bucket, err := client.Bucket(bucketName)if err != nil {handleError(err)}// 上传文件。err = bucket.PutObjectFromFile(objectName, localFileName)if err != nil {handleError(err)}
}
四、前端直传oss的流程
官方文档:https://help.aliyun.com/document_detail/112718.html?spm=a2c4g.11186623.0.0.e79f3853WePIx1
使用微服务上传会先想到:用前端把图片上传到后端然后后端再上传到oss上,其实这样做是不对的 带宽会翻倍

正确的流程是前端请求后端的一个key 拿着这个key来直接上传到oss,也就是web端直传oss

oss还有一个回调功能 在上传图片成功后回调gin

五、gin集成前端直传文件
官方文档:https://help.aliyun.com/document_detail/91818.htm?spm=a2c4g.11186623.0.0.16073c6bvKsZaD#concept-mhj-zzt-2fb
客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin的请求消息。OSS对带有Origin头的请求消息会进行跨域规则(CORS)的验证。因此需要为Bucket设置跨域规则以支持Post方法。

去官方文档下载客户端和服务端
服务端启动时可以指定ip和port

启动后访问服务端

可以发现 文件路径的前缀就是host的值
expire是超时时间 这个超时时间可能与阿里云服务的时间不同步 导致后续报错
修改客户端的ip和port
大部分配置都在upload.js里面
这里改为服务端的ip和port

打开html

打开Network查看请求过程

如果出现过期的原因的话有可能是因为这个超时时间可能与阿里云服务的时间不同步
在服务端时间设置长一下

如果使用回调逻辑得用公网或者内网穿透 然后把callback的url改成外网能访问的url就可以回调了
网络的调用过程:

这里就不说网络穿透了随便用哪个都行例如:花生壳、frp等等
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
