feat: Add S3 upload support