Go 通过七牛云免费测试存储空间实现S3

一、S3 基础概念:对象存储的核心设计​

​S3(Simple Storage Service)​​ 是 AWS 提出的对象存储协议标准,其核心设计理念包括:

  • ​扁平化存储结构​​:数据以 ​​对象​​(Object)形式存储于 ​​桶​​(Bucket)中,无目录层级,仅通过唯一键(Key)寻址。
  • ​HTTP RESTful API​​:通过标准 HTTP 方法(PUT/GET/DELETE)操作资源,天然跨平台、跨语言。
  • ​强扩展性​​:支持海量非结构化数据(图片、视频、日志等)的高并发存取。
  • ​元数据管理​​:每个对象可携带自定义元数据(如 Content-TypeETag
二、通过七牛云免费测试存储空间实现S3
  1. 进入七牛云管理页面,选择对象存储Kodo

  2. 点击空间管理 -> 新建空间 -> 输入存储空间名称 -> 存储区域

  3. 此时七牛云会询问是否绑定自己的是CDN加速域名,(学习使用当然没有对应的CDN加速域名),贴心的七牛云会给我们分配一个30天的临时测试域名。如果忘了,可以进入域名管理查看

  4. 创建AccessKey/SecretKey。点击右侧密钥管理,进入根据提示创建属于自己的AccessKey/SecretKey

三、根据创建空间的存储区域查询服务域名

服务域名_使用指南_对象存储 - 七牛开发者中心进入,查询对应的RegionID 及Endpoint即可,后面要用

四、编写测试代码实现

因为S3最初由AWS推行,后续各云厂商为了“抢人”。几乎都适配了Aws的API,所以我们就用AWS的API就行,也可以去对应的云厂商查看对应的API及用法

package article

import (
	"bytes"
	"context"
	"io"
	"os"
	"testing"
	"time"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
	"github.com/stretchr/testify/assert"
)

func TestS3(t *testing.T) {
	// 使用七牛云的S3服务
	cosId, ok := os.LookupEnv("QiNiuYunS3Key") //对应密钥管理里面的AccessKey
	if !ok {
		panic("没有找到环境变量 QiNiuYunS3Key ")
	}
	cosKey, ok := os.LookupEnv("QiNiuYunS3Secret")//对应密钥管理里面的SecretKey
	if !ok {
		panic("没有找到环境变量 QiNiuYunS3Key")
	}
	sess, err := session.NewSession(&aws.Config{
		Credentials: credentials.NewStaticCredentials(cosId, cosKey, ""),
          //创建空间时选择的区域,我选择的是华南-广东所以是这个值
		Region:      aws.String("cn-south-1"),
          //对应Region的Endpoint
		Endpoint:    aws.String("https://s3-cn-south-1.qiniucs.com"),
		// 强制使用 /bucket/key 的形态
		S3ForcePathStyle: aws.Bool(true),
	})
	assert.NoError(t, err)
	client := s3.New(sess)
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
	defer cancel()
  //上传到S3存储空间
	_, err = client.PutObjectWithContext(ctx, &s3.PutObjectInput{
           //创建的空间名,即桶名
		Bucket:      aws.String("xxxx"),
          //桶key
		Key:         aws.String("12"),
          //内容
		Body:        bytes.NewReader([]byte("这是一个测试文件用于测试s312")),
		ContentType: aws.String("text/plain;charset=utf-8"),
	})
	assert.NoError(t, err)
  //从S3存储空间获取数据
	res, err := client.GetObjectWithContext(ctx, &s3.GetObjectInput{
		Bucket: aws.String("xxxxx"),
		Key:    aws.String("12"),
	})
	assert.NoError(t, err)
	data, err := io.ReadAll(res.Body)
	assert.NoError(t, err)
	t.Log(string(data))
}

五、总结

实现这个过程其实很简单,而且七牛云非常良心有30天的免费测试域名,以下是上面代码对应的需要的信息:

keyvalue
Bucket创建的存储空间名
Key存储空间内存储的名称
cosId密钥管理生成的AccessKey
cosKey密钥管理生成的SecretKey
Region服务域名种对应的创建存储空间时的区域
EndpointRegion对应的Endpoint
Go语言中对接七牛云的对象存储,实现文件上传可以通过使用七牛云提供的SDK来完成。以下是一个简单的示例,展示了如何使用七牛云Go SDK进行文件上传。 首先,确保你已经安装了七牛云Go SDK。如果还没有安装,可以使用以下命令进行安装: ```sh go get -u github.com/qiniu/go-sdk/v7 ``` 接下来,编写代码实现文件上传: ```go package main import ( "fmt" "os" "github.com/qiniu/go-sdk/v7/auth/qbox" "github.com/qiniu/go-sdk/v7/storage" ) func main() { // 替换为你的AccessKey和SecretKey accessKey := "your-access-key" secretKey := "your-secret-key" // 替换为你的存储空间名称和存储区域 bucket := "your-bucket-name" zone := 0 // 0: 华东, 1: 华北, 2: 华南, 3: 北美 // 创建Mac mac := qbox.NewMac(accessKey, secretKey) // 配置 cfg := storage.Config{ Zone: &storage.ZoneHuanan, UseHTTPS: false, UseCdnDomains: false, } // 本地文件路径 localFile := "/path/to/your/file" // 上传凭证 putPolicy := storage.PutPolicy{ Scope: bucket, Deadline: time.Now().Add(time.Hour).Unix(), // 1小时后过期 } token := putPolicy.UploadToken(mac) // 上传文件 ret := storage.PutRet{} err := storage.NewFormUploader(&cfg).PutFile(nil, &ret, token, "key", localFile, nil) if err != nil { fmt.Println("上传失败:", err) return } fmt.Println("上传成功:", ret.Key) } ``` 在这个示例中,我们首先导入了七牛云Go SDK的相关包,然后配置了AccessKey和SecretKey、存储空间名称和存储区域。接着,我们创建了一个Mac对象,并配置了存储区域等信息。然后,我们生成了一个上传凭证,并使用FormUploader进行文件上传。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁽˙³˙⁾◟(๑•́ ₃ •̀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值