Maison > développement back-end > Golang > 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 ?

Linda Hamilton
Libérer: 2024-11-07 20:13:03
original
1033 Les gens l'ont consulté

How to Stream File Uploads to AWS S3 Using Go?

Télécharger des fichiers en streaming sur 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. Configurez 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 maximum 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 la méthode uploader.Upload 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 à l'aide 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)
}
Copier après la connexion

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.

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