Bagaimana untuk Melaksanakan Muat Naik Fail POST Pra-Tandatangan ke AWS S3 Menggunakan Go?

Mary-Kate Olsen
Lepaskan: 2024-11-21 22:30:13
asal
957 orang telah melayarinya

How to Implement Pre-Signed POST File Uploads to AWS S3 Using Go?

Pra-Tandatangan POST Muat Naik ke AWS S3 Menggunakan Go

Untuk muat naik fail selamat ke baldi AWS S3, POST pratandatangan menawarkan kemudahan pendekatan. Begini cara untuk mencapainya dalam Go:

1. Konfigurasikan Akses Baldi:

Ubah suai dasar baldi S3 anda untuk membenarkan muat turun awam:

{
    "Version": "2012-10-17",
    "Id": "akjsdhakshfjlashdf",
    "Statement": [
        {
            "Sid": "kjahsdkajhsdkjasda",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKETNAMEHERE/*"
        }
    ]
}
Salin selepas log masuk

2. Buat Dasar POST Pra-Tandatangan:

Buat dasar HTTP POST yang memberikan kebenaran muat naik:

{ "expiration": "%s",
    "conditions": [
        {"bucket": "%s"},
        ["starts-with", "$key", "%s"],
        {"acl": "public-read"},

        {"x-amz-credential": "%s"},
        {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
        {"x-amz-date": "%s" }
    ]
}
Salin selepas log masuk

Konfigurasikan dasar dengan parameter ini:

  • tamat tempoh: Muat naik masa tamat
  • baldi: Baldi Sasaran S3 nama
  • kunci: Nama fail yang hendak dimuat naik
  • kelayakan: Bukti kelayakan AWS anda
  • tarikh: Tarikh semasa

3 . Tandatangan Polisi:

Gunakan bukti kelayakan pemilik baldi S3 untuk menandatangani polisi:

  • Ekod polisi menggunakan base64
  • Kira tandatangan HMAC-SHA256
  • Ekodkan tandatangan sebagai perenambelasan rentetan

4. Bina Permintaan POST:

Jana permintaan data borang berbilang bahagian:

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

type Field struct {
    Key, Value string
}

func Upload(url string, fields []Field) error {
    b := new(bytes.Buffer)
    w := multipart.NewWriter(b)
    for _, field := range fields {
        fw, err := w.CreateFormField(field.Key)
        if err != nil {
            return err
        }
        if _, err := fw.Write([]byte(field.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())

    creds := &credentials.StaticProvider{Value: credentials.Value{
        AccessKeyID:     "AKIAIOSFODNN7EXAMPLE",
        SecretAccessKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    }}
    cfg := &aws.Config{Credentials: creds}

    client := new(&http.Client{Transport: &aws.HTTPSHandler{Client: *client, Config: *cfg}})
    res, err := client.Do(req)
    if err != nil {
        return err
    }
    if res.StatusCode != http.StatusOK {
        return fmt.Errorf("bad status: %s", res.Status)
    }
    return nil
}
Salin selepas log masuk

Sediakan medan dasar yang ditandatangani dan URL titik akhir. Muat naik POST pra-tandatangan anda ke AWS S3 kemudiannya akan dilaksanakan.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Muat Naik Fail POST Pra-Tandatangan ke AWS S3 Menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan