Skip to content

Instantly share code, notes, and snippets.

@tkuchiki
Last active May 2, 2020 23:50
Show Gist options
  • Save tkuchiki/3db459fc6e89f44b33c9 to your computer and use it in GitHub Desktop.
Save tkuchiki/3db459fc6e89f44b33c9 to your computer and use it in GitHub Desktop.
s3 にアップロードする (golang)
$ ./put-s3 --help
sage: put-s3 --file=FILE --bucket=BUCKET --region=REGION [<flags>]

Flags:
      --help                 Show context-sensitive help (also try --help-long and --help-man).
  -f, --file=FILE            upload file
  -b, --bucket=BUCKET        bucket
  -r, --region=REGION        region
      --path=PATH            path
      --content-type=CONTENT-TYPE
                             content-type
      --cache-control=CACHE-CONTROL
                             cache-control
      --part-size=PART-SIZE  part size (bytes)
      --version              Show application version.
$ ./put-s3 --bucket test-backet --path "foo/bar/testfile" --region "ap-northeast-1" --file testfile
Uploaded s3://test-bucket/foo/bar/testfile
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"gopkg.in/alecthomas/kingpin.v2"
"log"
"os"
)
func S3PutObject(filename, contentType, bucket, cacheControl string, file *os.File) (err error) {
putObj := &s3.PutObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(filename),
Body: file,
}
if contentType != "" {
putObj.ContentType = aws.String(contentType)
}
if cacheControl != "" {
putObj.CacheControl = aws.String(cacheControl)
}
log.Println(putObj)
_, err = s3Cli.PutObject(putObj)
return err
}
var (
file = kingpin.Flag("file", "upload file").Short('f').Required().File()
bucket = kingpin.Flag("bucket", "bucket").Short('b').Required().String()
region = kingpin.Flag("region", "region").Short('r').Required().String()
path = kingpin.Flag("path", "path").String()
contentType = kingpin.Flag("content-type", "content-type").String()
cacheControl = kingpin.Flag("cache-control", "cache-control").String()
s3Cli *s3.S3
)
func main() {
kingpin.Version("0.1")
kingpin.Parse()
sess := session.New()
s3Cli = s3.New(sess, aws.NewConfig().WithRegion(*region))
err := S3PutObject(*path, *contentType, *bucket, *cacheControl, *file)
if err != nil {
log.Fatal(err)
}
fmt.Println(fmt.Sprintf("Uploaded s3://%s/%s", *bucket, *path))
}
package main
import (
"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"
"gopkg.in/alecthomas/kingpin.v2"
"log"
"os"
)
func S3MultipartUpload(path, contentType, bucket, cacheControl string, partSize int, file *os.File) (err error) {
var uploader *s3manager.Uploader
if partSize != 0 {
uploader = s3manager.NewUploaderWithClient(s3Cli, func(u *s3manager.Uploader) {
u.PartSize = int64(partSize)
})
} else {
uploader = s3manager.NewUploaderWithClient(s3Cli)
}
uploadInput := &s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(path),
Body: file,
}
if contentType != "" {
uploadInput.ContentType = aws.String(contentType)
}
if cacheControl != "" {
uploadInput.CacheControl = aws.String(cacheControl)
}
_, err = uploader.Upload(uploadInput)
return err
}
var (
file = kingpin.Flag("file", "upload file").Short('f').Required().File()
bucket = kingpin.Flag("bucket", "bucket").Short('b').Required().String()
region = kingpin.Flag("region", "region").Short('r').Required().String()
path = kingpin.Flag("path", "path").String()
contentType = kingpin.Flag("content-type", "content-type").String()
cacheControl = kingpin.Flag("cache-control", "cache-control").String()
partSize = kingpin.Flag("part-size", "part size (bytes)").Int()
s3Cli *s3.S3
)
func main() {
kingpin.Version("0.1")
kingpin.Parse()
sess := session.New()
s3Cli = s3.New(sess, aws.NewConfig().WithRegion(*region))
err := S3MultipartUpload(*path, *contentType, *bucket, *cacheControl, *partSize, *file)
defer (*file).Close()
if err != nil {
log.Fatal(err)
}
fmt.Println(fmt.Sprintf("Uploaded s3://%s/%s", *bucket, *path))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment