„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie streame ich Datei-Uploads zu AWS S3 mit Go?

Wie streame ich Datei-Uploads zu AWS S3 mit Go?

Veröffentlicht am 10.11.2024
Durchsuche:226

How to Stream File Uploads to AWS S3 Using Go?

Stream-Datei-Upload auf AWS S3 mit Go

Übersicht

Das direkte Hochladen großer Dateien auf AWS S3 bei gleichzeitiger Minimierung des Speicher- und Festplattenbedarfs ist eine wesentliche Aufgabe im Cloud Computing. Dieser Leitfaden zeigt, wie Sie dies mit dem AWS SDK for Go erreichen.

Lösung

Um einen Datei-Upload direkt nach S3 zu streamen, können Sie das s3manager-Paket verwenden. Hier ist eine Schritt-für-Schritt-Lösung:

  1. Konfigurieren Sie AWS-Anmeldeinformationen und -Sitzung:

    • Legen Sie Ihren AWS-Zugriffsschlüssel und Ihr Geheimnis fest. oder verwenden Sie den Standard-Anmeldeinformationsanbieter.
    • Initialisieren Sie eine AWS-Sitzung mit der angegebenen Konfiguration.
  2. Erstellen Sie einen S3-Uploader:

    • Initialisieren Sie einen S3-Uploader mit der Sitzung und optionalen Konfigurationseinstellungen.
    • Sie können Parameter wie Teilgröße, Parallelität und maximale Upload-Teile konfigurieren.
  3. Öffnen Sie die Datei:

    • Öffnen Sie die Datei, die Sie hochladen möchten, mit der os.Open-Funktion.
  4. Laden Sie die Datei hoch:

    • Verwenden Sie die Methode uploader.Upload mit den entsprechenden Dateiinformationen (Bucket, Schlüssel und Dateizeiger).

Beispielcode

Das folgende Codebeispiel zeigt, wie das Hochladen großer Dateien nach AWS S3 mit 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)
}

Indem Sie diese Schritte befolgen, können Sie große Multipart-/Formulardatendateien effizient und mit minimaler Speichernutzung direkt in AWS S3 hochladen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3