AWS S3 или Amazon S3 — это система хранения от Amazon для хранения и извлечения файлов из любого места в Интернете. Это масштабируемая, надежная, быстрая и недорогая система хранения данных от Amazon. Он предоставляет простой в использовании комплект разработчика для хранения и извлечения файлов.

В этом руководстве вы узнаете, как загружать массовые файлы в корзину S3 aws golang. Мы будем использовать Переход на SDK AWS для загрузки файлов в AWS S3.

Для AWS SDK для Go требуется Go 1.15 или более поздние версии. Вы можете просмотреть текущую версию Go, выполнив следующую команду.

go version
Войти в полноэкранный режим

Выйти из полноэкранного режима

Информацию об установке или обновлении вашей версии Go см.

Прежде чем вы сможете использовать AWS SDK для Go V2, вам необходимо иметь учетную запись Amazon. Видеть Как создать и активировать новую учетную запись AWS? подробности

Загрузите SDK AWS Golang для использования в своей кодовой базе с помощью приведенной ниже команды.

go get github.com/aws/aws-sdk-go/aws
Войти в полноэкранный режим

Выйти из полноэкранного режима

Мы рассмотрим это руководство шаг за шагом, чтобы загрузить массовые файлы на сервер AWS S3 Bucket с помощью Golang с примером кода.


Загрузить требуемые пакеты

Мы создадим файл main.go и импортируем необходимые пакеты для загрузки файлов в AWS S3 Bucket.

package main

import (
    "bytes"
    "fmt"
    "log"
    "net/http"
    "os"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)
Войти в полноэкранный режим

Выйти из полноэкранного режима


Пользовательская структура для получателя

Мы будем использовать структуру Session, поэтому мы можем использовать ее как получатель, и мы передадим этот получатель нашей основной функции загрузки,

С помощью пользовательской структуры мы устраняем дублирование кода. Мы будем использовать только один сеанс для загрузки всех наших массовых файлов в ведро s3 aws golang.

type Session struct {
    S3Session *session.Session
}
Войти в полноэкранный режим

Выйти из полноэкранного режима


Настройте основную конфигурацию и сеанс AWS

Мы настроим конфигурацию, используя РЕГИОН AWS S3, СЕКРЕТНЫЙ ИДЕНТИФИКАТОР и СЕКРЕТНЫЙ КЛЮЧ, и создадим один сеанс AWS для загрузки нескольких файлов в AWS S3. Затем мы вызовем метод upload() и передадим экземпляр сеанса AWS и сведения о файле для загрузки файла на сервер AWS S3.

func main() {
    paths := []string{"", ""}
    credential := credentials.NewStaticCredentials(
        os.Getenv("SECRET_ID"),
        os.Getenv("SECRET_KEY"),
        "",
    )

    awsConfig := aws.Config{
        Region:      aws.String(os.Getenv("REGION")),
        Credentials: credential,
    }

    s, err := session.NewSession(&awsConfig)
    if err != nil {
        log.Println("failed to create S3 session:", err.Error())
        return
    }

    se := Session{s}

    err = se.upload(paths)
    if err != nil {
        log.Println(err.Error())
        return
    }

}
Войти в полноэкранный режим

Выйти из полноэкранного режима


Создайте метод загрузки для массовой загрузки файлов в AWS S3

Мы создадим метод upload() для загрузки файлов на сервер AWS S3. Мы откроем файл один за другим и сохраним его в буфере, а затем поместим файл в AWS S3, используя метод PutObject() из S3. Мы также укажем параметры в PutObjectInput при загрузке файла. Мы также включим шифрование AES256 для файлов, используя параметры ServerSideEncryption структуры s3.PutObjectInput.

func (s Session) upload(paths []string) error {
    for _, path := range paths {
        upFile, err := os.Open(path)
        if err != nil {
            log.Printf("failed %s, error: %v", path, err.Error())
            continue
        }
        defer upFile.Close()

        upFileInfo, err := upFile.Stat()
        if err != nil {
            log.Printf("failed to get stat %s, error: %v", path, err.Error())
            continue
        }
        var fileSize int64 = upFileInfo.Size()
        fileBuffer := make([]byte, fileSize)
        upFile.Read(fileBuffer)

        // uploading
        _, err = s3.New(s.S3Session).PutObject(&s3.PutObjectInput{
            Bucket:               aws.String(os.Getenv("BUCKET_NAME")),
            Key:                  aws.String(path),
            ACL:                  aws.String("public-read"), // could be private if you want it to be access by only authorized users
            Body:                 bytes.NewReader(fileBuffer),
            ContentLength:        aws.Int64(int64(fileSize)),
            ContentType:          aws.String(http.DetectContentType(fileBuffer)),
            ContentDisposition:   aws.String("attachment"),
            ServerSideEncryption: aws.String("AES256"),
            StorageClass:         aws.String("INTELLIGENT_TIERING"),
        })

        if err != nil {
            log.Printf("failed to upload %s, error: %v", path, err.Error())
            continue
        }

        url := "
        url = fmt.Sprintf(url, os.Getenv("BUCKET_NAME"), os.Getenv("REGION"), path)
        fmt.Printf("Uploaded File Url %s\n", url)
    }

    return nil
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

вы можете проверить больше статьи, как это на моем личный блог

Полный код