"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo transmitir cargas de archivos a AWS S3 usando Go?

¿Cómo transmitir cargas de archivos a AWS S3 usando Go?

Publicado el 2024-11-10
Navegar:138

How to Stream File Uploads to AWS S3 Using Go?

Transmitir carga de archivos a AWS S3 usando Go

Descripción general

Cargar archivos grandes directamente a AWS S3 mientras se minimiza la memoria y el uso del disco es una tarea esencial en la computación en la nube. Esta guía demostrará cómo lograr esto utilizando AWS SDK for Go.

Solución

Para transmitir la carga de un archivo directamente a S3, puede utilizar el paquete s3manager. Aquí hay una solución paso a paso:

  1. Configurar las credenciales y la sesión de AWS:

    • Establezca su clave de acceso y secreto de AWS. o utilice el proveedor de credenciales predeterminado.
    • Inicialice una sesión de AWS con el especificado configuración.
  2. Crear un cargador de S3:

    • Inicializar un cargador de S3 con la sesión y los ajustes de configuración opcionales.
    • Puedes configurar parámetros como el tamaño de la pieza, la simultaneidad y la carga máxima. partes.
  3. Abra el archivo:

    • Abra el archivo que desea cargar usando la función os.Open.
  4. Cargar el archivo:

    • Usar el uploader.Método de carga con la información de archivo adecuada (depósito, clave y puntero de archivo).

Código de ejemplo

El siguiente ejemplo de código demuestra cómo transmitir carga de archivos grandes a AWS S3 usando 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)
}

Al seguir estos pasos, puede cargar de manera eficiente archivos grandes de datos de formularios o de varias partes directamente a AWS S3 con una utilización mínima de memoria.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3