Heim >Backend-Entwicklung >Golang >Wie kann ich mit Go große Multipart-/Formulardatendateien effizient nach AWS S3 streamen?

Wie kann ich mit Go große Multipart-/Formulardatendateien effizient nach AWS S3 streamen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-09 06:43:02742Durchsuche

How can I stream large multipart/form-data files to AWS S3 efficiently with Go?

Streamen Sie den Datei-Upload auf AWS S3 mit Go

Das direkte Streamen großer Multipart-/Formulardatendateien auf AWS S3 ist eine effiziente Möglichkeit zur Minimierung Speichernutzung und Speicherplatzbedarf der Datei.

Lösung

Nutzen Sie die Der Upload-Manager von AWS SDK for Go zum direkten Streamen von Dateien nach S3. Hier ist ein Beispiel:

package main

import (
    "fmt"
    "os"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

var (
    filename      = "file_name.zip"
    myBucket      = "myBucket"
    myKey         = "file_name.zip"
    accessKey     = ""
    accessSecret  = ""
)

func main() {
    var awsConfig *aws.Config
    if accessKey == "" || accessSecret == "" {
        awsConfig = &aws.Config{
            Region: aws.String("us-west-2"),
        }
    } else {
        awsConfig = &aws.Config{
            Region:      aws.String("us-west-2"),
            Credentials: credentials.NewStaticCredentials(accessKey, accessSecret, ""),
        }
    }

    sess := session.Must(session.NewSession(awsConfig))
    uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
        u.PartSize = 5 * 1024 * 1024
        u.Concurrency = 2
    })

    f, err := os.Open(filename)
    if err != nil {
        fmt.Printf("failed to open file %q, %v", filename, err)
        return
    }
    defer f.Close()

    result, err := uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String(myBucket),
        Key:    aws.String(myKey),
        Body:   f,
    })

    if err != nil {
        fmt.Printf("failed to upload file, %v", err)
        return
    }

    fmt.Printf("file uploaded to, %s\n", result.Location)
}

Durch die Verwendung des Upload-Managers mit benutzerdefinierten Parametern können Sie die Teilgröße, den Grad der Parallelität und die maximale Anzahl der Upload-Teile konfigurieren, um den Streaming-Prozess zu optimieren.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Go große Multipart-/Formulardatendateien effizient nach AWS S3 streamen?. 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