"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment diffuser des téléchargements de fichiers sur AWS S3 à l'aide de Go ?

Comment diffuser des téléchargements de fichiers sur AWS S3 à l'aide de Go ?

Publié le 2024-11-10
Parcourir:231

How to Stream File Uploads to AWS S3 Using Go?

Téléchargement de fichiers volumineux vers AWS S3 à l'aide de Go

Présentation

Le téléchargement de fichiers volumineux directement sur AWS S3 tout en minimisant la mémoire et l'empreinte disque est une tâche essentielle dans le cloud computing. Ce guide montrera comment y parvenir à l'aide du SDK AWS pour Go.

Solution

Pour diffuser un téléchargement de fichier directement sur S3, vous pouvez utiliser le package s3manager. Voici une solution étape par étape :

  1. Configurer les informations d'identification et la session AWS :

    • Définissez votre clé d'accès et votre secret AWS, ou utilisez le fournisseur d'informations d'identification par défaut.
    • Initialisez une session AWS avec le spécifié configuration.
  2. Créer un téléchargeur S3 :

    • Initialiser un téléchargeur S3 avec la session et les paramètres de configuration facultatifs.
    • Vous pouvez configurer des paramètres tels que la taille des parties, la simultanéité et le téléchargement maximal parts.
  3. Ouvrez le fichier :

    • Ouvrez le fichier que vous souhaitez télécharger à l'aide de la fonction os.Open.
  4. Téléchargez le fichier :

    • Utilisez le programme de téléchargement.Méthode de téléchargement avec les informations de fichier appropriées (compartiment, clé et pointeur de fichier).

Exemple de code

L'exemple de code suivant montre comment diffuser en continu le téléchargement de fichiers volumineux sur AWS S3 utilisant s3manager :

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

En suivant ces étapes, vous pouvez télécharger efficacement de gros fichiers de données multiparts/formulaires directement sur AWS S3 avec une utilisation minimale de la mémoire.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3