Maison >développement back-end >Golang >Comment puis-je diffuser efficacement de gros fichiers de données multiparts/formulaires vers AWS S3 avec Go ?

Comment puis-je diffuser efficacement de gros fichiers de données multiparts/formulaires vers AWS S3 avec Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-09 06:43:02750parcourir

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

Diffusez le téléchargement de fichiers vers AWS S3 avec Go

Le streaming direct de gros fichiers de données multiparts/formulaires vers AWS S3 est un moyen efficace de minimiser utilisation de la mémoire et disque de fichiers empreinte.

Solution

Utilisez le gestionnaire de téléchargement du kit AWS SDK for Go pour diffuser des fichiers directement sur S3. Voici un exemple :

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)
}

En utilisant le gestionnaire de téléchargement avec des paramètres personnalisés, vous pouvez configurer la taille des parties, le niveau de simultanéité et le nombre maximum de parties de téléchargement pour optimiser le processus de streaming.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn