Go

Go AWS S3 GetObject 파일 가져오기

DevelopC 2022. 9. 30. 16:33
728x90

Go AWS S3 GetObject  파일 가져오기

AWS SDK for Go v2를 사용하여 간단하게 구현한 예제입니다. GetObject를 사용하여 S3 버킷에 있는 파일을 다운로드할 수 있습니다.

package main

import (
	"context"
	"fmt"
	"io"
	"log"
	"time"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/s3"
)

type Client interface {
	GetObject(ctx context.Context, params *s3.GetObjectInput, optFns ...func(*s3.Options)) (*s3.GetObjectOutput, error)
}

type Object struct {
	Body            io.ReadCloser
	ContentEncoding *string
	ContentLength   int64
	ContentType     *string
	LastModified    *time.Time
}

func GetObject(ctx context.Context, client Client, bucket, key string) (*Object, error) {
	result, err := client.GetObject(ctx, &s3.GetObjectInput{
		Bucket: aws.String(bucket),
		Key:    aws.String(key),
	})

	if err != nil {
		return nil, err
	}

	return &Object{
		Body:            result.Body,
		ContentEncoding: result.ContentEncoding,
		ContentLength:   result.ContentLength,
		ContentType:     result.ContentType,
		LastModified:    result.LastModified,
	}, nil
}

func main() {
	cfg, err := config.LoadDefaultConfig(context.TODO())
	if err != nil {
		log.Fatalln("configuration error, " + err.Error())
	}

	result, err := GetObject(context.TODO(), s3.NewFromConfig(cfg), "bucket", "key")
	if err != nil {
		log.Fatalln("GetObject error, " + err.Error())
	}

	fmt.Println(*result.ContentType)
	fmt.Println(*result.LastModified)
}

 

728x90

'Go' 카테고리의 다른 글

Go URL로 파일 다운로드  (0) 2023.02.14
Go 파일 읽기  (0) 2022.11.24
Go 랜덤 문자열 만들기  (0) 2022.09.21
Go 수행시간 측정  (0) 2017.09.26
Go 파일 사이즈 구하기  (0) 2017.08.07