>백엔드 개발 >Golang >Go를 사용하여 AWS S3에 파일 업로드를 스트리밍하는 방법은 무엇입니까?

Go를 사용하여 AWS S3에 파일 업로드를 스트리밍하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-07 20:13:031012검색

How to Stream File Uploads to AWS S3 Using Go?

Go를 사용하여 AWS S3에 파일 업로드 스트리밍

개요

메모리와 디스크 공간을 최소화하면서 대용량 파일을 AWS S3에 직접 업로드하는 것이 필수 작업입니다. 클라우드 컴퓨팅에서. 이 가이드에서는 Go용 AWS SDK를 사용하여 이를 달성하는 방법을 보여줍니다.

솔루션

파일 업로드를 S3에 직접 스트리밍하려면 s3manager 패키지를 활용할 수 있습니다. 단계별 솔루션은 다음과 같습니다.

  1. AWS 자격 증명 및 세션 구성:

    • AWS 액세스 키와 비밀을 설정합니다. 또는 기본 자격 증명 공급자를 사용하십시오.
    • 지정된 구성으로 AWS 세션을 초기화합니다.
  2. S3 업로더 생성:

    • 세션 및 선택적 구성 설정을 사용하여 S3 업로더를 초기화합니다.
    • 부분 크기, 동시성, 최대 업로드 부분과 같은 매개변수를 구성할 수 있습니다.
  3. 파일 열기:

    • os.Open 기능을 사용하여 업로드하려는 파일을 엽니다.
  4. 파일 업로드:

    • 적절한 파일 정보(버킷, 키 및 파일 포인터)와 함께 uploader.Upload 메소드를 사용합니다.

예제 코드

다음 코드 샘플은 s3manager를 사용하여 AWS S3에 대용량 파일 업로드를 스트리밍하는 방법을 보여줍니다.

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

다음 단계에 따라 다음을 수행할 수 있습니다. 최소한의 메모리 사용으로 대규모 멀티파트/양식 데이터 파일을 AWS S3에 직접 효율적으로 업로드할 수 있습니다.

위 내용은 Go를 사용하여 AWS S3에 파일 업로드를 스트리밍하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.