ホームページ  >  記事  >  バックエンド開発  >  Go を使用して AWS S3 への事前署名済み POST アップロードを実行するにはどうすればよいですか?

Go を使用して AWS S3 への事前署名済み POST アップロードを実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-23 01:01:14339ブラウズ

How to Perform a Pre-signed POST Upload to AWS S3 using Go?

Go で AWS S3 への事前署名済み POST アップロードの実行

このガイドでは、事前署名済み POST アップロードの実行の詳細について詳しく説明しますGo を使用して AWS S3 バケットに署名付き POST アップロードします。このアプローチは、PUT を伴うより一般的な事前署名付きアップロード メカニズムとは異なります。

前提条件:

  1. パブリック ダウンロード アクセスを許可するように S3 バケットを設定します。適切なバケット ポリシー。
  2. バケット、キー、有効期限を指定して、ファイルのアップロードを許可する POST ポリシーを構築します。時間、アクセス制御リスト (ACL)、およびその他の必要なパラメーター。
  3. S3 バケット所有者の認証情報を使用して POST ポリシーを生成し、署名します。これには、base64 エンコード、HMAC-SHA256 ハッシュ計算、および 16 進エンコードが含まれます。

マルチパート フォーム データの構築と POST リクエスト:

アップロードを開始するには、準備をします。署名されたポリシー文書、キー、ファイルの内容など、ポリシーで指定されたすべてのフィールドを含むマルチパート フォーム データ リクエスト。マルチパート パッケージの CreateFormField メソッドを使用して、各フォーム フィールドを作成します。

コード例:

プロセスの概要を示す Go コード スニペットを次に示します:

func Upload(url string, fields Fields) error {
    var b bytes.Buffer
    w := multipart.NewWriter(&b)
    for _, f := range fields {
        fw, err := w.CreateFormField(f.Key)
        if err != nil {
            return err
        }
        if _, err := fw.Write([]byte(f.Value)); err != nil {
            return err
        }
    }
    w.Close()

    req, err := http.NewRequest("POST", url, &b)
    if err != nil {
        return err
    }
    req.Header.Set("Content-Type", w.FormDataContentType())

    client := &http.Client{}
    res, err := client.Do(req)
    if err != nil {
        return err
    }
    if res.StatusCode != http.StatusOK {
        err = fmt.Errorf("bad status: %s", res.Status)
    }
    return nil
}

これらの手順に従うと、事前署名された POST メソッドを使用してファイルを AWS S3 バケットにシームレスにアップロードできます。行きましょう

以上がGo を使用して AWS S3 への事前署名済み POST アップロードを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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