Heim >Backend-Entwicklung >Golang >Wie streame ich Datei-Uploads zu AWS S3 mit Go?

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-07 20:13:031011Durchsuche

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 auf S3 zu streamen, können Sie das s3manager-Paket verwenden. Hier ist eine Schritt-für-Schritt-Lösung:

  1. AWS-Anmeldeinformationen und -Sitzung konfigurieren:

    • 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 Teilegröß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 Sie das Hochladen großer Dateien nach AWS S3 mit s3manager streamen:

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 dies tun Laden Sie große Multipart-/Formulardatendateien effizient und mit minimaler Speichernutzung direkt in AWS S3 hoch.

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

Stellungnahme:
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