0
Help us understand the problem. What are the problem?

posted at

Golangでform dataから受け取った画像をS3にアップロード

はじめに

GolangでAPIサーバーを構築しており、APIで受け取った画像データをS3にアップロードする処理を実装したので、方法を共有しようと思います。初心者Golangerなので受け取った画像をリサイズなどせずにそのままアップロードする方法しかわからなかったので、その点は悪しからず。むしろ方法をご教示いただきたい所存。。。S3以外の処理は省略します。

完成コード

s3Handler.go
func (app *Application) imageUpload(w http.ResponseWriter, r *http.Request) {
	err := godotenv.Load(fmt.Sprintf("./%s.env", os.Getenv("GO_ENV")))
	if err != nil {
		log.Fatalln(err)
	}
	ak := os.Getenv("AWS_ACCESS_KEY")         // .envのAWS_ACCESS_KEY
	ask := os.Getenv("AWS_SECRET_ACCESS_KEY") // .envのAWS_SECRET_ACCESS_KEY
	ab := os.Getenv("AWS_BUCKET")             // .envのAWS_BUCKET
	creds := credentials.NewStaticCredentials(ak, ask, "") // AWSに接続
	sess, err := session.NewSession(&aws.Config{
		Credentials: creds,
		Region:      aws.String("ap-northeast-1"),
	})

    // エラー処理など省略

	file, reader, err := r.FormFile("image") //formDataで送られた画像ファイルを取得

	defer file.Close()

	uploader := s3manager.NewUploader(sess) // S3にアップロード
	_, err = uploader.Upload(&s3manager.UploadInput{
		Bucket: aws.String(ab),               // バケット名
		Key:    aws.String(reader.Filename),  // ファイル保存名
		Body:   file,                         // ファイル本体
	})
}

サーバーを起動し、postmanで指定のURLにpostすると、
スクリーンショット 2022-05-18 2.01.02.png

S3にアップロードできているのが確認できた。
スクリーンショット 2022-05-18 2.04.24.png

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?