pushed creation of s3 client down to UploadedFile
made UploadedFile base class abstract, with concrete implementations for each storage provider