Полное руководство по диспетчеру загрузки AWS SDK Go v2: размер части и методы по умолчанию

AWS SDK для Go v2 предоставляет мощный менеджер загрузки, который упрощает процесс загрузки больших файлов в Amazon S3. В этой статье мы рассмотрим концепцию размера детали по умолчанию при создании средства загрузки и обсудим различные методы, доступные в AWS SDK Go v2 для управления загрузкой файлов. Мы также предоставим примеры кода, чтобы продемонстрировать использование каждого метода и обсудить преимущества, которые они предлагают. Давайте погрузимся!

Основные сведения о размере части по умолчанию.
При использовании диспетчера загрузки AWS SDK Go v2 размер части по умолчанию относится к размеру каждой отдельной части, на которую делится большой файл в процессе загрузки. По умолчанию AWS SDK Go v2 устанавливает размер части 8 МБ. Однако вы можете настроить это значение в соответствии со своими требованиями.

Метод 1: UploaderOptions
AWS SDK Go v2 предоставляет структуру UploaderOptions, которая позволяет задавать различные параметры конфигурации для загрузчика, включая размер части. Вот пример того, как установить нестандартный размер детали:

import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/aws/defaults"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/aws/aws-sdk-go-v2/service/s3/s3manager"
)
func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(), defaults.WithRegion("us-west-2"))
    if err != nil {
        panic(err)
    }
    uploader := s3manager.NewUploader(cfg, func(u *s3manager.Uploader) {
        u.PartSize = 10 * 1024 * 1024 // 10MB part size
    })
    file, err := os.Open("path/to/file")
    if err != nil {
        panic(err)
    }
    _, err = uploader.Upload(context.TODO(), &s3manager.UploadInput{
        Bucket: aws.String("my-bucket"),
        Key:    aws.String("my-key"),
        Body:   file,
    })
    if err != nil {
        fmt.Println("failed to upload file", err)
        return
    }
    fmt.Println("file uploaded successfully")
}

Метод 2: UploaderBuilder
Другой подход — использовать UploaderBuilder для создания экземпляра загрузчика с нестандартным размером детали. Вот пример:

import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/aws/defaults"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/aws/aws-sdk-go-v2/service/s3/s3manager"
)
func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(), defaults.WithRegion("us-west-2"))
    if err != nil {
        panic(err)
    }
    uploader := s3manager.NewUploaderBuilder().
        WithPartSize(10 * 1024 * 1024). // 10MB part size
        WithS3(cfg).
        Build()
    file, err := os.Open("path/to/file")
    if err != nil {
        panic(err)
    }
    _, err = uploader.Upload(context.TODO(), &s3manager.UploadInput{
        Bucket: aws.String("my-bucket"),
        Key:    aws.String("my-key"),
        Body:   file,
    })
    if err != nil {
        fmt.Println("failed to upload file", err)
        return
    }
    fmt.Println("file uploaded successfully")
}

Метод 3: UploaderOptionsFunc
Вы также можете использовать UploaderOptionsFunc, чтобы установить собственный размер детали при создании загрузчика. Вот пример:

import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/aws/defaults"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/aws/aws-sdk-go-v2/service/s3/s3manager"
)
func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(), defaults.WithRegion("us-west-2"))
    if err != nil {
        panic(err)
    }
    uploader := s3manager.NewUploader(cfg, func(u *s3manager.Uploader) {
        u.PartSize = 10 * 1024 * 1024 // 10MB part size
    })
    file, err := os.Open("path/to/file")
    if err != nil {
        panic(err)
    }
    _, err = uploader.Upload(context.TODO(), &s3manager.UploadInput{
        Bucket: aws.String("my-bucket"),
        Key:    aws.String("my-key"),
        Body:   file,
})
    if err != nil {
        fmt.Println("failed to upload file", err)
        return
    }
    fmt.Println("file uploaded successfully")
}

В этой статье мы рассмотрели концепцию размера детали по умолчанию при создании загрузчика в диспетчере загрузки AWS SDK Go v2. Мы обсудили три различных метода установки пользовательского размера детали: использование UploaderOptions, UploaderBuilder и UploaderOptionsFunc. Каждый метод обеспечивает гибкость и позволяет оптимизировать процесс загрузки в соответствии с вашими конкретными требованиями. Поняв эти методы, вы сможете эффективно управлять загрузкой файлов в Amazon S3 с помощью AWS SDK Go v2.