copy file using storage API rather than shutil, so it works with S3