Abstracting out upload to decouple from S3