golang轻量级AWS S3 REST API操作插件库simples3的使用
Golang轻量级AWS S3 REST API操作插件库simples3的使用
概述
SimpleS3是一个Go语言库,用于通过REST API调用或使用AWS签名版本4签名的预签名URL来操作S3存储桶中的对象。
安装
go get github.com/rhnvrm/simples3
使用示例
下面是一个完整的示例代码,展示了如何使用simples3库进行文件上传、下载、删除以及生成预签名URL:
package main
import (
"io/ioutil"
"os"
"time"
"github.com/rhnvrm/simples3"
)
func main() {
// 打开本地测试文件
testTxt, _ := os.Open("testdata/test.txt")
defer testTxt.Close()
// 创建simples3实例
// 方式1:手动提供凭证(推荐使用环境变量)
s3 := simples3.New(Region, AWSAccessKey, AWSSecretKey)
// 方式2:在EC2实例上使用IAM角色获取凭证
// s3, _ := simples3.NewUsingIAM(Region)
// 可以设置自定义端点(针对兼容S3协议的实例)
// s3.SetEndpoint(CustomEndpoint)
// 注意:如果已经读取了文件内容,考虑添加testTxt.Seek(0, 0)
// 因为库会共享文件指针
// 文件上传示例
resp, err := s3.FileUpload(simples3.UploadInput{
Bucket: AWSBucket,
ObjectKey: "test.txt",
ContentType: "text/plain",
FileName: "test.txt",
Body: testTxt,
})
if err != nil {
panic(err)
}
// 文件删除示例
err = s3.FileDelete(simples3.DeleteInput{
Bucket: os.Getenv("AWS_S3_BUCKET"),
ObjectKey: "test.txt",
})
if err != nil {
panic(err)
}
// 文件下载示例
file, _ := s3.FileDownload(simples3.DownloadInput{
Bucket: AWSBucket,
ObjectKey: "test.txt",
})
data, _ := ioutil.ReadAll(file)
file.Close()
// 生成预签名URL示例
var time, _ = time.Parse(time.RFC1123, "Fri, 24 May 2013 00:00:00 GMT")
url := s3.GeneratePresignedURL(simples3.PresignedInput{
Bucket: AWSBucket,
ObjectKey: "test.txt",
Method: "GET",
Timestamp: time,
ExpirySeconds: 86400,
})
}
主要功能说明
-
初始化:
- 可以使用AWS凭证直接初始化
- 在EC2实例上可以使用IAM角色自动获取凭证
-
文件操作:
- 上传文件到S3
- 从S3下载文件
- 删除S3上的文件
-
预签名URL:
- 生成用于临时访问的预签名URL
- 可以设置过期时间
注意事项
- 在使用文件上传功能时,如果已经读取了文件内容,记得使用
Seek(0, 0)
将文件指针重置到开头 - 预签名URL可以用于浏览器直接访问S3资源,无需后端中转
贡献
欢迎贡献代码。可以提交Pull Request或创建Issue来报告问题或提议新功能。
作者
Rohan Verma hello@rohanverma.net
许可证
BSD-2-Clause-FreeBSD
更多关于golang轻量级AWS S3 REST API操作插件库simples3的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang轻量级AWS S3 REST API操作插件库simples3的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用simples3操作AWS S3的Golang指南
simples3是一个轻量级的Golang库,用于与AWS S3进行交互。它提供了简洁的API来执行常见的S3操作,而无需复杂的AWS SDK配置。
安装simples3
首先安装simples3库:
go get github.com/ryansb/simples3
基本配置
package main
import (
"github.com/ryansb/simples3"
"log"
"time"
)
func main() {
// 创建S3客户端
s3 := simples3.New(
"your-access-key-id", // AWS访问密钥ID
"your-secret-access-key", // AWS秘密访问密钥
"us-east-1", // AWS区域
"your-bucket-name", // S3桶名称
)
// 现在可以使用s3客户端进行操作...
}
常用操作示例
1. 上传文件
func uploadFile(s3 *simples3.S3) {
// 读取本地文件
data, err := os.ReadFile("local-file.txt")
if err != nil {
log.Fatal(err)
}
// 上传参数
params := simples3.UploadInput{
Bucket: "your-bucket-name",
ObjectKey: "remote-path/file.txt",
ContentType: "text/plain",
FileName: "file.txt",
Body: bytes.NewReader(data),
}
// 执行上传
resp, err := s3.FileUpload(params)
if err != nil {
log.Fatal(err)
}
log.Printf("文件上传成功: %v", resp.Location)
}
2. 下载文件
func downloadFile(s3 *simples3.S3) {
// 下载参数
params := simples3.DownloadInput{
Bucket: "your-bucket-name",
ObjectKey: "remote-path/file.txt",
}
// 执行下载
data, err := s3.FileDownload(params)
if err != nil {
log.Fatal(err)
}
// 保存到本地文件
err = os.WriteFile("downloaded-file.txt", data, 0644)
if err != nil {
log.Fatal(err)
}
log.Println("文件下载成功")
}
3. 列出桶中的对象
func listObjects(s3 *simples3.S3) {
// 列出桶中对象
objects, err := s3.ListObjects("your-bucket-name", "")
if err != nil {
log.Fatal(err)
}
for _, obj := range objects {
log.Printf("对象: %s (大小: %d, 最后修改: %s)",
obj.Key, obj.Size, obj.LastModified.Format(time.RFC3339))
}
}
4. 删除对象
func deleteObject(s3 *simples3.S3) {
// 删除参数
params := simples3.DeleteInput{
Bucket: "your-bucket-name",
ObjectKey: "remote-path/file.txt",
}
// 执行删除
err := s3.FileDelete(params)
if err != nil {
log.Fatal(err)
}
log.Println("文件删除成功")
}
5. 生成预签名URL
func generatePresignedURL(s3 *simples3.S3) {
// 生成预签名URL参数
params := simples3.PresignedInput{
Bucket: "your-bucket-name",
ObjectKey: "remote-path/file.txt",
Method: "GET", // 或 "PUT" 用于上传
ExpirySeconds: 3600, // URL有效期(秒)
}
// 生成URL
url, err := s3.PresignedURL(params)
if err != nil {
log.Fatal(err)
}
log.Printf("预签名URL: %s", url)
}
高级用法
自定义HTTP客户端
func customHTTPClient() {
// 创建自定义HTTP客户端
client := &http.Client{
Timeout: 30 * time.Second,
Transport: &http.Transport{
MaxIdleConns: 10,
IdleConnTimeout: 30 * time.Second,
DisableCompression: true,
},
}
// 创建S3客户端时传入自定义HTTP客户端
s3 := simples3.NewWithClient(
"your-access-key-id",
"your-secret-access-key",
"us-east-1",
"your-bucket-name",
client,
)
// 使用自定义客户端的s3实例...
}
错误处理
simples3返回的错误通常包含详细的AWS错误信息:
func handleErrors(s3 *simples3.S3) {
_, err := s3.FileDownload(simples3.DownloadInput{
Bucket: "non-existent-bucket",
ObjectKey: "nonexistent-file.txt",
})
if err != nil {
if awsErr, ok := err.(simples3.AWSError); ok {
log.Printf("AWS错误代码: %s, 消息: %s", awsErr.Code, awsErr.Message)
} else {
log.Printf("非AWS错误: %v", err)
}
}
}
总结
simples3提供了以下优势:
- 轻量级,没有AWS SDK的复杂性
- 简洁直观的API
- 支持常见S3操作
- 易于集成到现有项目中
对于更复杂的需求,可能需要使用完整的AWS SDK for Go,但对于大多数基本S3操作,simples3是一个高效的选择。
完整文档和更多示例可以参考GitHub仓库。