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
Libérer: 2024-11-09 06:43:02
original
796 Les gens l'ont consulté

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)
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal