ホームページ >バックエンド開発 >Golang >Go を使用してファイルのアップロードを AWS S3 にストリーミングする方法は?

Go を使用してファイルのアップロードを AWS S3 にストリーミングする方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-07 20:13:031021ブラウズ

How to Stream File Uploads to AWS S3 Using Go?

Go を使用した AWS S3 へのストリーム ファイル アップロード

概要

メモリとディスク フットプリントを最小限に抑えながら、大きなファイルを AWS S3 に直接アップロードすることは重要なタスクですクラウドコンピューティングにおいて。このガイドでは、AWS SDK for Go を使用してこれを実現する方法を説明します。

解決策

ファイル アップロードを S3 に直接ストリーミングするには、s3manager パッケージを利用できます。段階的な解決策は次のとおりです:

  1. AWS 認証情報とセッションの構成:

    • AWS アクセス キーとシークレットを設定します。または、デフォルトの認証情報プロバイダーを使用します。
    • 指定された構成で AWS セッションを初期化します。
  2. S3 アップローダーを作成します:

    • セッションとオプションの構成設定を使用して S3 アップローダーを初期化します。
    • パーツ サイズ、同時実行数、最大アップロード パーツなどのパラメーターを構成できます。
  3. ファイルを開きます:

    • os.Open 関数を使用して、アップロードするファイルを開きます。
  4. ファイルをアップロードします:

    • 適切なファイル情報 (バケット、キー、ファイル ポインター) を指定して、uploader.Upload メソッドを使用します。

コード例

次のコードサンプルは、s3manager を使用して大きなファイルのアップロードを AWS S3 にストリーミングする方法を示しています。

package main

import (
    "fmt"
    "os"

    "github.com/aws/aws-sdk-go/aws/credentials"

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

const (
    filename      = "file_name.zip"
    myBucket      = "myBucket"
    myKey         = "file_name.zip"
    accessKey     = ""
    accessSecret  = ""
)

func main() {
    var awsConfig *aws.Config
    if accessKey == "" || accessSecret == "" {
        //load default credentials
        awsConfig = &aws.Config{
            Region: aws.String("us-west-2"),
        }
    } else {
        awsConfig = &aws.Config{
            Region:      aws.String("us-west-2"),
            Credentials: credentials.NewStaticCredentials(accessKey, accessSecret, ""),
        }
    }

    // The session the S3 Uploader will use
    sess := session.Must(session.NewSession(awsConfig))

    // Create an uploader with the session and default options
    //uploader := s3manager.NewUploader(sess)

    // Create an uploader with the session and custom options
    uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
        u.PartSize = 5 * 1024 * 1024 // The minimum/default allowed part size is 5MB
        u.Concurrency = 2            // default is 5
    })

    //open the file
    f, err := os.Open(filename)
    if err != nil {
        fmt.Printf("failed to open file %q, %v", filename, err)
        return
    }
    //defer f.Close()

    // Upload the file to S3.
    result, err := uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String(myBucket),
        Key:    aws.String(myKey),
        Body:   f,
    })

    //in case it fails to upload
    if err != nil {
        fmt.Printf("failed to upload file, %v", err)
        return
    }
    fmt.Printf("file uploaded to, %s\n", result.Location)
}

これらの手順に従うことで、次のことができます。メモリ使用量を最小限に抑えながら、大規模なマルチパート/フォームデータ ファイルを AWS S3 に効率的に直接アップロードします。

以上がGo を使用してファイルのアップロードを AWS S3 にストリーミングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。