func NewS3(sess *session.Session, bucket string) Storage {
	uploader := s3manager.NewUploader(sess)
	downloader := s3manager.NewDownloader(sess)
	client := awss3.New(sess)
	return &s3{
		uploader:   uploader,
		bucket:     bucket,
		downloader: downloader,
		client:     client,
	}
}
NewS3 creates a new S3 client that satisfies the Storage interface
package gateway
import (
	"io"
	"path"
	"strings"
	"time"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	awss3 "github.com/aws/aws-sdk-go/service/s3"
	"github.com/aws/aws-sdk-go/service/s3/s3manager"
)
type Storage interface {
	Upload(key string, payload io.Reader, contentType string) error
	Download(key string) ([]byte, error)
	List(key string) ([]string, error)
	GetLastModified(key string) (time.Time, error)
}
type s3 struct {
	uploader   *s3manager.Uploader
	downloader *s3manager.Downloader
	client     *awss3.S3
	bucket     string
}