"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como transmitir uploads de arquivos para AWS S3 usando Go?

Como transmitir uploads de arquivos para AWS S3 usando Go?

Publicado em 2024-11-10
Navegar:646

How to Stream File Uploads to AWS S3 Using Go?

Transmitir upload de arquivos para AWS S3 usando Go

Visão geral

Fazer upload de arquivos grandes diretamente para AWS S3 enquanto minimiza a memória e o espaço ocupado em disco é uma tarefa essencial na computação em nuvem. Este guia demonstrará como fazer isso usando o AWS SDK for Go.

Solução

Para transmitir o upload de um arquivo diretamente para o S3, você pode utilizar o pacote s3manager. Aqui está uma solução passo a passo:

  1. Configurar credenciais e sessão da AWS:

    • Defina sua chave de acesso e segredo da AWS, ou use o provedor de credenciais padrão.
    • Inicialize uma sessão da AWS com a configuração especificada.
  2. Crie um S3 Uploader:

    • Inicialize um uploader S3 com a sessão e configurações opcionais.
    • Você pode configurar parâmetros como tamanho da parte, simultaneidade e peças máximas de upload.
  3. Abra o arquivo:

    • Abra o arquivo que deseja enviar usando a função os.Open.
  4. Fazer upload do arquivo:

    • Use o método uploader.Upload com as informações apropriadas do arquivo (bucket, chave e ponteiro de arquivo).

Código de exemplo

O exemplo de código a seguir demonstra como transmitir upload de arquivos grandes para 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)
}

Seguindo essas etapas, você pode fazer upload com eficiência de grandes arquivos multipart/form-data diretamente para o AWS S3 com utilização mínima de memória.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3