Maison > développement back-end > Golang > Comment diffuser des fichiers volumineux sur AWS S3 avec une utilisation minimale de la mémoire et du disque ?

Comment diffuser des fichiers volumineux sur AWS S3 avec une utilisation minimale de la mémoire et du disque ?

DDD
Libérer: 2024-11-07 17:06:02
original
807 Les gens l'ont consulté

How to Stream Large Files to AWS S3 with Minimal Memory and Disk Usage?

Téléchargement de fichiers en streaming sur AWS S3 avec une mémoire et une empreinte disque de fichiers minimales

Problème : Vous devez télécharger un grand fichier de données multipart/form directement sur AWS S3 tout en minimisant l'utilisation de la mémoire et du disque de fichiers.

Solution : Utilisez AWS S3 Uploader en suivant les étapes suivantes :

  1. Créez un téléchargeur avec une configuration personnalisée comprenant la taille des parties, la simultanéité et le nombre maximal de parties de téléchargement selon les besoins.
  2. Ouvrez le fichier à télécharger et transmettez-le comme entrée au téléchargeur.
  3. Lancez le processus de téléchargement de fichiers à l'aide du téléchargeur.
  4. Gérez le résultat du téléchargement et surveillez sa progression.

Exemple de code :

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

// Configure Amazon S3 credentials and connection
var accessKey = ""
var accessSecret = ""

func main() {
    // Determine if your AWS credentials are configured globally
    var awsConfig *aws.Config
    if accessKey == "" || accessSecret == "" {
        // No credentials provided, load the default credentials
        awsConfig = &aws.Config{
            Region: aws.String("us-west-2"),
        }
    } else {
        // Static credentials provided
        awsConfig = &aws.Config{
            Region:      aws.String("us-west-2"),
            Credentials: credentials.NewStaticCredentials(accessKey, accessSecret, ""),
        }
    }

    // Create an AWS session with the configured credentials
    sess := session.Must(session.NewSession(awsConfig))

    // Create an uploader with customized configuration
    uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
        u.PartSize = 5 * 1024 * 1024 // Set the part size to 5MB
        u.Concurrency = 2           // Set the concurrency to 2
    })

    // Open the file to be uploaded
    f, err := os.Open("file_name.zip")
    if err != nil {
        fmt.Printf("Failed to open file: %v", err)
        return
    }
    defer f.Close()

    // Upload the file to S3
    result, err := uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String("myBucket"),
        Key:    aws.String("file_name.zip"),
        Body:   f,
    })
    if err != nil {
        fmt.Printf("Failed to upload file: %v", err)
        return
    }
    fmt.Printf("File uploaded to: %s", result.Location)
}
Copier après la connexion

En utilisant S3 Uploader et en diffusant le fichier en streaming, vous pouvez minimiser l'utilisation de la mémoire et du disque de fichiers pendant le processus de téléchargement, garantissant ainsi une gestion efficace des fichiers volumineux.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal