package s3 import ( "context" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/s3/types" "io" "time" ) type PutFilesObj struct { Key string Reader io.ReadSeeker ContentLength int64 ContentType string ExpireAt int64 PublicRead bool PublicReadWrite bool } func (c *Client) PutFile(ctx context.Context, bucket string, obj *PutFilesObj) error { var ( err error input = &s3.PutObjectInput{ Bucket: aws.String(bucket), Key: aws.String(obj.Key), Body: obj.Reader, ACL: types.ObjectCannedACLPrivate, } output *s3.PutObjectOutput ) if obj.ExpireAt > 0 { t := time.UnixMilli(obj.ExpireAt) input.Expires = &t } if obj.ContentLength > 0 { input.ContentLength = aws.Int64(obj.ContentLength) } if obj.ContentType == "" { input.ContentType = aws.String(obj.ContentType) } if obj.PublicRead { input.ACL = types.ObjectCannedACLPublicRead } if obj.PublicReadWrite { input.ACL = types.ObjectCannedACLPublicReadWrite } if output, err = c.client.PutObject(ctx, input); err != nil { return err } _ = output return nil }