前言

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