網頁

2022/5/4

Golang 從本機上傳檔案到AWS S3 bucket

在locahost的Go應用程式中以AWS提供的SDK aws-sdk-go-v2上傳檔案到S3 bucket。


範例環境:

  • Go 1.18


事前要求

參考「AWS 建立IAM管理使用者及credentials」設定供應用程式存取AWS需要的IAM管理員credentials。

參考「Golang 建立AWS S3 bucket」建立S3 bucket。


下載AWS SDK Go V2 modules

在專案根目錄執行以下命令下載需要的aws-sdk-go-v2 modules。

  • go get github.com/aws/aws-sdk-go-v2
  • go get github.com/aws/aws-sdk-go-v2/config
  • go get github.com/aws/aws-sdk-go-v2/service/s3


上傳檔案到S3 bucket

呼叫config.LoadDefaultConfig()傳入region參數建立aws.Conifg物件,AWS SDK預設會讀取$HOME/.aws/credentials的access keys來通過權限驗證,然後依此參數建立s3.Client來存取S3 bucket objects。

建立s3.PutObjectInput設定要上傳的bucket、檔名及內容後傳入s3.Client.PutObject()上傳。

main.go

package main

import (
    "context"
    "strings"

    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
    ctx := context.TODO()
    client := NewS3Client(ctx)
    input := CreateInput()

    _, err := PutFile(ctx, client, input)
    if err != nil {
        panic(err)
    }
}

func NewS3Client(ctx context.Context) *s3.Client {
    cfg, err := config.LoadDefaultConfig(
        ctx,
        config.WithRegion("ap-northeast-1"),
    )
    if err != nil {
        panic(err)
    }
    return s3.NewFromConfig(cfg) // Create an Amazon S3 service client
}

func CreateInput() *s3.PutObjectInput {
    bucket := "s3-demo-bucket-202112151320"
    key := "greeting.txt"
    data := strings.NewReader("good day")

    return &s3.PutObjectInput{
        Bucket: &bucket,
        Key:    &key,
        Body:   data,
    }
}

func PutFile(
    ctx context.Context,
    client *s3.Client,
    input *s3.PutObjectInput) (*s3.PutObjectOutput, error) {

    return client.PutObject(ctx, input)
}

github


測試

執行Go應用程式後在AWS console的S3 bucket可看到上傳的檔案greeting.txt



下載後開啟內容如下。




若檔案要上傳到指定目錄參考「Golang 上傳檔案到AWS S3 bucket目錄」。


沒有留言:

張貼留言