「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go を使用してファイルのアップロードを AWS S3 にストリーミングする方法は?

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

2024 年 11 月 10 日に公開
ブラウズ:186

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 セッションを初期化します。 configuration.
  2. S3 アップローダーの作成:

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

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

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

コード例

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

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 に直接効率的にアップロードできます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3