”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何将文件上传到 AWS Ssando Golang

如何将文件上传到 AWS Ssando Golang

发布于2024-11-08
浏览:280

Como Realizar Upload de Arquivos no AWS Ssando Golang

通过 Golang 将文件上传到 S3 是在 AWS 上管理文件时最常见的操作之一。此功能允许开发人员以安全且可扩展的方式将文档、图像、视频和其他类型的文件上传到云存储。在本文中,我们将探讨如何使用 Go 语言和 AWS S3 API 执行此集成。接下来,您将了解配置环境并成功上传的主要步骤。

准备开发环境

开始上传文件之前,您需要配置您的开发环境。确保您有:

  1. 有效的 AWS 账户。
  2. 您的 AWS 账户的访问凭证(访问密钥和密钥)。
  3. Go SDK 已安装。
  4. 官方AWS SDK for Go包

要安装适用于 Go 的 AWS 开发工具包,只需运行以下命令:

go get -u github.com/aws/aws-sdk-go/aws

现在 SDK 已安装,您可以开始编写 AWS S3 集成代码了。

了解如何使用 Lambdas 生命周期 s3 来自动化这项工作:https://devopsmind.com.br/aws-pt-br/automacao-aws-s3-lifecycle-lambda/

上传至S3

配置 AWS S3 客户端

上传的第一步是配置AWS S3客户端。该客户端允许您与 AWS 服务交互并管理您的存储桶和对象。以下代码显示如何使用您的凭据配置客户端:

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func createS3Client() *s3.S3 {
    sess := session.Must(session.NewSession(&aws.Config{
        Region: aws.String("us-west-2"),
    }))
    return s3.New(sess)
}

在此代码中,我们创建一个 AWS 会话并配置 S3 客户端。不要忘记将区域替换为配置 S3 存储桶的位置。

创建上传功能

配置AWS S3客户端后,我们将创建负责上传文件的函数。此函数将从本地系统读取文件并将其发送到 S3 的特定存储桶内:

import (
    "fmt"
    "os"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func uploadFileToS3(bucketName, filePath, key string) error {
    file, err := os.Open(filePath)
    if err != nil {
        return err
    }
    defer file.Close()

    sess := session.Must(session.NewSession(&aws.Config{
        Region: aws.String("us-west-2"),
    }))

    uploader := s3.New(sess)
    _, err = uploader.PutObject(&s3.PutObjectInput{
        Bucket: aws.String(bucketName),
        Key:    aws.String(key),
        Body:   file,
    })

    if err != nil {
        return fmt.Errorf("falha no upload para o S3: %v", err)
    }
    fmt.Println("Upload realizado com sucesso!")
    return nil
}

这里,uploadFileToS3函数接收三个参数:存储桶名称、本地文件路径以及文件在S3中将具有的密钥(名称)。该函数打开文件并使用 AWS S3 SDK for Go PutObject 函数将其发送到存储桶。

处理权限

在上传到 AWS S3 时,确保正确配置您的权限非常重要。 AWS 使用 IAM(身份和访问管理)策略系统来管理对其资源的访问权限。确保代码中使用的 IAM 用户或角色具有足够的权限来执行到 S3 的上传操作。有关 IAM 权限的更多详细信息,请参阅 AWS 官方文档。

实际使用示例

将图像发送到 S3 存储桶

假设您要创建一项服务,用户可以在其中上传图像并将其存储在 S3 存储桶中。该代码看起来类似于以下内容:

func main() {
    err := uploadFileToS3("meu-bucket", "caminho/para/imagem.png", "imagem.png")
    if err != nil {
        fmt.Println("Erro ao fazer upload:", err)
        return
    }
    fmt.Println("Upload concluído com sucesso!")
}

本例中,图片imagem.png将被上传到my-bucket存储桶中。文件在 S3 上的路径及其名称由 uploadFileToS3.

函数的参数定义

结论

当您使用正确的工具时,使用 Golang 将文件上传到 AWS S3 是一项简单的任务。借助 AWS SDK for Go,您可以轻松将应用程序与 S3 服务集成,从而提供强大且可扩展的文件存储解决方案。现在您已经了解了基础知识,您可以扩展您的实现以包含其他功能,例如下载文件、列出存储桶中的对象等。继续使用 Golang 探索与 AWS 的更多集成可能性,并查看有关 Golang 和 AWS S3 的更多内容。


版本声明 本文转载于:https://dev.to/fernandomullerjr/como-realizar-upload-de-arquivos-no-aws-s3-usando-golang-1gec?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-07-06
  • 同实例无需转储复制MySQL数据库方法
    同实例无需转储复制MySQL数据库方法
    在同一实例上复制一个MySQL数据库而无需转储在同一mySQL实例上复制数据库,而无需创建InterMediate sqql script。以下方法为传统的转储和IMPORT过程提供了更简单的替代方法。 直接管道数据 MySQL手动概述了一种允许将mysqldump直接输出到MySQL clie...
    编程 发布于2025-07-06
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,以便更快地搜索这些前缀。理解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-07-06
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java中的浪费唤醒:真实性或神话?在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用...
    编程 发布于2025-07-06
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-07-06
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-07-06
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-07-06
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-07-06
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-07-06
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 中删除一个频繁的问题时,在与Chrome and IE9中的图像一起工作时,遇到了一个频繁的问题。和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下CSS ID块创建带...
    编程 发布于2025-07-06
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-07-06
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-07-06
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-07-06
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-07-06
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-07-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3