Wie führe ich mit Go einen vorsignierten POST-Upload auf AWS S3 durch?

Linda Hamilton
Freigeben: 2024-11-23 01:01:14
Original
338 Leute haben es durchsucht

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

Durchführen eines vorsignierten POST-Uploads auf AWS S3 in Go

In diesem Leitfaden werden wir uns mit den Besonderheiten der Durchführung eines Vorab-Uploads befassen Signierter POST-Upload in einen AWS S3-Bucket mit Go. Dieser Ansatz unterscheidet sich vom häufigeren vorsignierten Upload-Mechanismus mit PUT.

Voraussetzungen:

  1. Konfigurieren Sie Ihren S3-Bucket so, dass er den öffentlichen Download-Zugriff ermöglicht, indem Sie festlegen entsprechende Bucket-Richtlinie.
  2. Erstellen Sie eine POST-Richtlinie, die das Hochladen von Dateien zulässt, und geben Sie dabei den Bucket, den Schlüssel, die Ablaufzeit und die Zugriffskontrollliste an (ACL) und andere notwendige Parameter.
  3. Generieren und signieren Sie die POST-Richtlinie mit den Anmeldeinformationen des S3-Bucket-Besitzers. Dies umfasst Base64-Kodierung, HMAC-SHA256-Hash-Berechnung und Hex-Kodierung.

Mehrteilige Formulardatenkonstruktion und POST-Anfrage:

Um den Upload zu starten, bereiten Sie sich vor eine mehrteilige Formulardatenanforderung, die alle in der Richtlinie angegebenen Felder enthält, einschließlich des signierten Richtliniendokuments, des Schlüssels und des Dateiinhalts. Verwenden Sie die CreateFormField-Methode des Multipart-Pakets, um jedes Formularfeld zu erstellen.

Codebeispiel:

Hier ist ein Go-Codeausschnitt, der den Prozess beschreibt:

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

Indem Sie diese Schritte befolgen, können Sie mithilfe der vorsignierten POST-Methode in nahtlos Dateien in einen AWS S3-Bucket hochladen Los.

Das obige ist der detaillierte Inhalt vonWie führe ich mit Go einen vorsignierten POST-Upload auf AWS S3 durch?. 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