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 main
import (
"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上,其实这样做是不对的 带宽会翻倍
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方法。去官方文档下载客户端和服务端ipport文件路径host这个超时时间可能与阿里云服务的时间不同步 导致后续报错
ipportupload.jsipport这个超时时间可能与阿里云服务的时间不同步公网内网穿透花生壳frp