You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang将图片/文件上传至Wasabi存储桶?

使用Golang S3 SDK v2 上传文件至Wasabi存储桶

前置准备

  • 安装S3 SDK v2核心依赖包:
    go get github.com/aws/aws-sdk-go-v2/aws
    go get github.com/aws/aws-sdk-go-v2/config
    go get github.com/aws/aws-sdk-go-v2/service/s3
    go get github.com/aws/aws-sdk-go-v2/feature/s3/manager
    
  • 准备Wasabi的API密钥(Access Key ID、Secret Access Key)、目标存储桶名称及对应区域(如us-east-1)。

核心代码实现

1. 加载配置并初始化S3客户端

Wasabi兼容S3协议,只需指定其自定义端点即可复用AWS SDK:

package main

import (
	"context"
	"log"
	"os"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/s3"
	"github.com/aws/aws-sdk-go-v2/service/s3/types"
)

func main() {
	// 加载配置,指定Wasabi区域和端点
	cfg, err := config.LoadDefaultConfig(context.TODO(),
		config.WithRegion("us-east-1"), // 替换为你的Wasabi存储桶区域
		config.WithEndpointResolverWithOptions(aws.EndpointResolverWithOptionsFunc(
			func(service, region string, options ...interface{}) (aws.Endpoint, error) {
				// 不同区域端点不同,比如us-west-1对应https://s3.us-west-1.wasabisys.com
				return aws.Endpoint{
					URL:           "https://s3.wasabisys.com",
					SigningRegion: "us-east-1",
				}, nil
			},
		)),
	)
	if err != nil {
		log.Fatalf("加载配置失败: %v", err)
	}

	// 初始化S3客户端
	client := s3.NewFromConfig(cfg)

2. 上传本地文件到存储桶

使用s3manager.Uploader可自动处理大文件分块上传:

// 替换为实际的本地文件路径、存储桶名称和目标键
	filePath := "./local-image.jpg"
	bucketName := "your-wasabi-bucket"
	targetKey := "uploads/image.jpg"

	// 打开本地文件
	file, err := os.Open(filePath)
	if err != nil {
		log.Fatalf("打开文件失败: %v", err)
	}
	defer file.Close()

	// 创建上传器并执行上传
	uploader := s3.NewUploader(client)
	_, err = uploader.Upload(context.TODO(), &s3.PutObjectInput{
		Bucket: aws.String(bucketName),
		Key:    aws.String(targetKey),
		Body:   file,
		ACL:    types.ObjectCannedACLPrivate, // 根据需求设置ACL,如public-read
	})
	if err != nil {
		log.Fatalf("上传失败: %v", err)
	}

	log.Println("文件上传成功")
}

关键注意事项

  • 端点与区域匹配:Wasabi不同区域的端点不同,务必对应正确,否则会出现请求失败。
  • 权限验证:确保API密钥拥有s3:PutObject权限,且存储桶策略允许该密钥执行上传操作。
  • 安全最佳实践:避免硬编码密钥,可通过AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量传递凭证。

内容的提问来源于stack exchange,提问作者Carlo Nyte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:53:21