首页 > 后端开发 > Golang > 在 Amazon Sith Go 中管理文件的初学者指南

在 Amazon Sith Go 中管理文件的初学者指南

Mary-Kate Olsen
发布: 2024-11-05 02:19:02
原创
375 人浏览过

Amazon Simple Storage Service (S3) 已成为基于 Web 的文件存储的行业标准。它的设计具有高达 99.999999999% 的耐用性和安全性。它还具有灵活的存储类别、数据管理和分析功能。

您是否正在使用 Go 为您的项目构建服务器端应用程序并需要存储选项?本文假设您是 AWS 初学者,将引导您完成从 Go 应用程序使用 S3 进行存储的过程。

AWS 和 Go 入门

使用正确的权限和参数设置 AWS S3 存储桶可能会令人望而生畏。您必须创建一个存储桶,创建一个 IAM 用户,向 IAM 用户授予在存储桶上执行操作的权限,并在您的环境中设置访问密钥。

首先,创建一个 Amazon AWS 帐户并登录(如果您还没有帐户)。然后,像这样搜索S3。

Beginner

现在,点击“创建存储桶”。系统会提示您根据项目的规格配置存储桶。

Beginner

现在您已经创建了存储桶,下一步是设置一个 IAM 用户,您将向该用户授予访问 S3 存储桶的权限。

前往您的个人资料的安全凭证部分并创建一个用户。

Beginner

然后,为用户创建访问密钥并检索访问密钥和秘密密钥。

Beginner

在您计算机的根目录中,创建一个 .aws 文件夹和一个名为credentials(不带扩展名)的文件;然后像这样添加键:

[default]
aws_access_key_id = <aws_access_key_id here>
aws_secret_access_key = <aws_secret_access_key here>
登录后复制
登录后复制

现在,向用户颁发这些权限以允许 S3 上传。

Beginner

最后,初始化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 存储桶的证据。

Beginner

您随时可以通过在 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 函数执行程序时,应将文件下载到您指定的目标路径。

Beginner

您还需要在目标路径中的密钥中指定密钥。

从 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。

Beginner

结论

您已了解如何为 IAM 用户设置 S3 存储桶(也适用于 root 用户)以及如何从 S3 存储桶上传、下载和删除文件。

您可以使用 AWS S3 存储桶执行更多功能。我希望这篇文章能为您提供进一步的基础,具体取决于您的项目的用例。

以上是在 Amazon Sith Go 中管理文件的初学者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板