在 Amazon Sith Go 中管理文件的初学者指南
Nov 05, 2024 am 02:19 AMAmazon Simple Storage Service (S3) 已成为基于 Web 的文件存储的行业标准。它的设计具有高达 99.999999999% 的耐用性和安全性。它还具有灵活的存储类别、数据管理和分析功能。
您是否正在使用 Go 为您的项目构建服务器端应用程序并需要存储选项?本文假设您是 AWS 初学者,将引导您完成从 Go 应用程序使用 S3 进行存储的过程。
AWS 和 Go 入门
使用正确的权限和参数设置 AWS S3 存储桶可能会令人望而生畏。您必须创建一个存储桶,创建一个 IAM 用户,向 IAM 用户授予在存储桶上执行操作的权限,并在您的环境中设置访问密钥。
首先,创建一个 Amazon AWS 帐户并登录(如果您还没有帐户)。然后,像这样搜索S3。
现在,点击“创建存储桶”。系统会提示您根据项目的规格配置存储桶。
现在您已经创建了存储桶,下一步是设置一个 IAM 用户,您将向该用户授予访问 S3 存储桶的权限。
前往您的个人资料的安全凭证部分并创建一个用户。
然后,为用户创建访问密钥并检索访问密钥和秘密密钥。
在您计算机的根目录中,创建一个 .aws 文件夹和一个名为credentials(不带扩展名)的文件;然后像这样添加键:
[default] aws_access_key_id = <aws_access_key_id here> aws_secret_access_key = <aws_secret_access_key here>
现在,向用户颁发这些权限以允许 S3 上传。
最后,初始化Go项目并安装AWS Go SDK。
go mod tidy go get github.com/aws/aws-sdk-go
您已完成所有设置,现在,您可以开始使用 AWS S3 存储桶上传、下载和管理文件。
将文件上传到 S3 存储桶
首先,您必须从AWS SDK包中导入必要的包。
将这些模块添加到 main.go 文件或您正在使用的任何文件的顶部:
package main import ( "bytes" "fmt" "io" "os" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" )
要上传文件,您必须创建一个新会话,打开文件,然后使用会话实例来上传文件。
[default] aws_access_key_id = <aws_access_key_id here> aws_secret_access_key = <aws_secret_access_key here>
UploadFile 函数接收存储桶名称、AWS 区域、文件密钥和 ACL(访问控制列表),并使用指定密钥将指定文件上传到 S3。
session.NewSession 函数创建一个新的 AWS 会话,s3.New 创建一个新的 S3 会话。 PutObject 函数使用文件 Bucket、Key、文件正文和 ACL 接收对 PutObjectInput 的引用。
go mod tidy go get github.com/aws/aws-sdk-go
当我使用参数调用 UploadFile 函数时,这是文件已上传到我的 S3 存储桶的证据。
您随时可以通过在 AWS S3 控制台上单击文件名来浏览文件的更多详细信息。
从 S3 存储桶下载文件
现在,您可以尝试使用指定的密钥检索文件。
package main import ( "bytes" "fmt" "io" "os" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" )
创建客户端实例后,GetObject函数接收&s3.GetObjectInput实例中的文件参数。您现在可以使用 io.Copy 函数将文件流复制到您的首选目的地。
func UploadFile(bucket, region, filePath, key, acl string) error { sess, err := session.NewSession(&aws.Config{ Region: aws.String(region), }) if err != nil { return fmt.Errorf("error creating session: %w", err) } file, err := os.Open(filePath) if err != nil { return fmt.Errorf("error opening file: %w", err) } defer file.Close() var buf bytes.Buffer if _, err := io.Copy(&buf, file); err != nil { return fmt.Errorf("error reading file: %w", err) } _, err = s3.New(sess).PutObject(&s3.PutObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), Body: bytes.NewReader(buf.Bytes()), ACL: aws.String(acl), }) if err != nil { return fmt.Errorf("error uploading file: %w", err) } fmt.Println("File uploaded successfully:", filePath, "to key:", key) return nil }
使用 DownloadFile 函数执行程序时,应将文件下载到您指定的目标路径。
您还需要在目标路径中的密钥中指定密钥。
从 S3 存储桶中删除文件
要从 S3 存储桶中删除文件,您将使用 AWS 开发工具包的 DeleteObject 函数来删除该文件。您必须指定 S3 存储桶名称和要删除的文件密钥。
func main() { bucket := "cloudboxbucket" region := "eu-north-1" filePath := "Makefile" key := "Makefile" acl := "private" if err := UploadFile(bucket, region, filePath, key, acl); err != nil { fmt.Println("Error uploading file:", err) } }
DeleteFile 函数首先创建一个会话,就像上传和下载示例中一样。 s3Client.DeleteObject 使用 DeleteObjectInput 结构进行调用,您将在其中指定 Bucket 和 Key 参数。
您可以使用WaitUntilObjectNotExists函数来确认该文件不存在。
func DownloadFile(bucket, region, key, destPath string) error { sess, err := session.NewSession(&aws.Config{ Region: aws.String(region), }) if err != nil { return fmt.Errorf("error creating session: %w", err) } s3Client := s3.New(sess) output, err := s3Client.GetObject(&s3.GetObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), }) if err != nil { return fmt.Errorf("error downloading file: %w", err) } defer output.Body.Close() destFile, err := os.Create(destPath) if err != nil { return fmt.Errorf("error creating destination file: %w", err) } defer destFile.Close() if _, err := io.Copy(destFile, output.Body); err != nil { return fmt.Errorf("error saving file: %w", err) } fmt.Println("File downloaded successfully:", key, "to", destPath) return nil }
执行DeleteFile函数时,可以看到我的S3存储桶中不再存在Makefile。
结论
您已了解如何为 IAM 用户设置 S3 存储桶(也适用于 root 用户)以及如何从 S3 存储桶上传、下载和删除文件。
您可以使用 AWS S3 存储桶执行更多功能。我希望这篇文章能为您提供进一步的基础,具体取决于您的项目的用例。
以上是在 Amazon Sith Go 中管理文件的初学者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

热门文章

热门文章

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)