[Go] AWS 3 객체 업로드

11727 단어 AWSGoS3tech
aws-sdk-go를 사용하여 S3 객체의 샘플 코드를 업로드/다운로드합니다.

차리다


$ go get github.com/aws/aws-sdk-go

샘플 코드

s3 포장을 직접 사용할 수 있지만 s3manager 포장 내부에 여러 가지 배려가 있어 편리합니다.

업로드


main.go
package main

import (
	"strings"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3/s3manager"
)

func main() {
	// s3manager.Uploader を初期化
	// リージョン、プロファイル名は適宜書き換えてください
	sess, err := session.NewSessionWithOptions(session.Options{
		Config:  aws.Config{Region: aws.String("ap-northeast-1")},
		Profile: "default",
	})
	if err != nil {
		panic(err)
	}
	u := s3manager.NewUploader(sess)

	// アップロードするデータを用意
	data := strings.NewReader(`{"message": "hello world"}`)
	// ローカルのファイルをアップロードする場合は以下のようにする
	// data, err := os.Open("example.json")
	// if err != nil {
	// 	panic(err)
	// }
	// defer data.Close()

	// バケット名とオブジェクトのパスを指定してアップロード
	_, err = u.Upload(&s3manager.UploadInput{
		Bucket:      aws.String("bucket-name"),
		Body:        aws.ReadSeekCloser(data),
		Key:         aws.String("path/to/file"),
		ContentType: aws.String("application/json"),
	})
	if err != nil {
		panic(err)
	}
}

다운로드


main.go
package main

import (
	"bytes"
	"fmt"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
	"github.com/aws/aws-sdk-go/service/s3/s3manager"
)

func main() {
	// s3manager.Downloader を初期化
	// リージョン、プロファイル名は適宜書き換えてください
	sess, err := session.NewSessionWithOptions(session.Options{
		Config:  aws.Config{Region: aws.String("ap-northeast-1")},
		Profile: "default",
	})
	if err != nil {
		panic(err)
	}
	d := s3manager.NewDownloader(sess)

	// 書き込み先を用意
	buf := aws.NewWriteAtBuffer([]byte{})
	// ローカルにダウンロードする場合は以下のようにする
	// buf, err := os.Create("example.json")
	// if err != nil {
	// 	panic(err)
	// }
	// defer buf.Close()

	// バケット名とオブジェクトのパスを指定してダウンロード
	_, err = d.Download(buf, &s3.GetObjectInput{
		Bucket: aws.String("bucket-name"),
		Key:    aws.String("path/to/file"),
	})
	if err != nil {
		panic(err)
	}

	// aws.NewWriteAtBuffer() を使用した場合は bytes.NewBuffer() で中身を読み込むことができる
	data := bytes.NewBuffer(buf.Bytes()).String()
	fmt.Println(data)
}

참고 자료


https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/

좋은 웹페이지 즐겨찾기