」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何將檔案上傳至 AWS Ssando Golang

如何將檔案上傳至 AWS Ssando Golang

發佈於2024-11-08
瀏覽:512

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]刪除
最新教學 更多>
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-04-12
  • 如何在不同列上兩次連接表以獲取相關數據?
    如何在不同列上兩次連接表以獲取相關數據?
    在不同的列上兩次加入同一表,請考慮一個有用戶表和投訴表的方案。投訴表中包含打開投訴的人和關閉該投訴的人的用戶身份證。目的是編寫一個查詢,以顯示這兩個人的用戶名。 最初,查詢可以為打開投訴的人檢索用戶名:但是,要檢索關閉投訴的人的用戶名,您需要使用其他列再次加入用戶表。這是使用以下查詢來實現的: s...
    程式設計 發佈於2025-04-12
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-04-12
  • 為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    查詢模式實現缺失:解決“無法找到”錯誤在Silverlight應用程序中,嘗試使用LINQ建立LINQ連接以錯誤而實現的數據庫”,無法找到查詢模式的實現。”當省略LINQ名稱空間或查詢類型缺少IEnumerable 實現時,通常會發生此錯誤。 解決問題來驗證該類型的質量是至關重要的。在此特定實例...
    程式設計 發佈於2025-04-12
  • 如何使用Java.net.urlConnection和Multipart/form-data編碼使用其他參數上傳文件?
    如何使用Java.net.urlConnection和Multipart/form-data編碼使用其他參數上傳文件?
    使用http request 上傳文件上傳到http server,同時也提交其他參數,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    程式設計 發佈於2025-04-12
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-04-12
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-04-12
  • Yii框架快速搭建CRUD應用,PHP高手必備
    Yii框架快速搭建CRUD應用,PHP高手必備
    Yii框架:快速构建高效CRUD应用的指南 Yii是一个高性能的PHP框架,以其速度、安全性以及对Web 2.0应用的良好支持而闻名。它遵循“约定优于配置”的原则,这意味着只要遵循其规范,就能编写比其他框架少得多的代码(更少的代码意味着更少的bug)。此外,Yii还提供了许多开箱即用的便捷功能,例如...
    程式設計 發佈於2025-04-12
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-04-12
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-04-12
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-04-12
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符提取最後一行,在Postgresql中,您可能需要遇到與在數據庫中的每個不同標識相關的信息中提取信息的情況。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: ...
    程式設計 發佈於2025-04-12
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-04-12
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中可能會遇到一個衝突,其中3派對軟件包將另一個帶有導入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    程式設計 發佈於2025-04-12
  • Properties.Settings.Default應用設置存儲位置揭秘
    Properties.Settings.Default應用設置存儲位置揭秘
    [2 理解properties.settings.default存儲位置 c#'s properties.settings.default 對像簡化了定義,訪問和保存應用程序設置的過程。 知道存儲位置對於手動配置調整和調試等任務至關重要。 這些存儲在特定於用戶的應用程序設置文件夾中...
    程式設計 發佈於2025-04-12

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3