Wie implementiert man vorsignierte POST-Datei-Uploads in AWS S3 mit Go?

Mary-Kate Olsen
Freigeben: 2024-11-21 22:30:13
Original
932 Leute haben es durchsucht

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

Vorsignierter POST-Upload auf AWS S3 mit Go

Für den sicheren Datei-Upload in AWS S3-Buckets bietet vorsignierter POST eine praktische Möglichkeit Ansatz. So erreichen Sie dies in Go:

1. Bucket-Zugriff konfigurieren:

Ändern Sie die Richtlinie Ihres S3-Buckets, um öffentliche Downloads zu ermöglichen:

{
    "Version": "2012-10-17",
    "Id": "akjsdhakshfjlashdf",
    "Statement": [
        {
            "Sid": "kjahsdkajhsdkjasda",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKETNAMEHERE/*"
        }
    ]
}
Nach dem Login kopieren

2. Erstellen Sie eine vorsignierte POST-Richtlinie:

Erstellen Sie eine HTTP-POST-Richtlinie, die Upload-Berechtigungen gewährt:

{ "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" }
    ]
}
Nach dem Login kopieren

Konfigurieren Sie die Richtlinie mit diesen Parametern:

  • Ablaufzeit: Ablaufzeit des Uploads
  • Bucket: Ziel-S3-Bucket Name
  • Schlüssel: Name der hochzuladenden Datei
  • Anmeldeinformationen: Ihre AWS-Anmeldeinformationen
  • Datum: Aktuelles Datum

3 . Richtlinie signieren:

Verwenden Sie die Anmeldeinformationen des S3-Bucket-Besitzers, um die Richtlinie zu signieren:

  • Kodieren Sie die Richtlinie mit base64
  • Berechnen Sie die HMAC-SHA256-Signatur
  • Kodieren Sie die Signatur als Hexadezimalzahl Zeichenfolge

4. POST-Anfrage erstellen:

Erstellen Sie die mehrteilige Formulardatenanforderung:

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
}
Nach dem Login kopieren

Geben Sie die signierten Richtlinienfelder und die Endpunkt-URL an. Ihr vorsignierter POST-Upload auf AWS S3 wird dann ausgeführt.

Das obige ist der detaillierte Inhalt vonWie implementiert man vorsignierte POST-Datei-Uploads in AWS S3 mit Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage