Everything looks good the only possible level I would go further is to abstract away the logic for saving the file and have that handled by providers so later you could easily flex in alternate saving methods such as database, email, cloud storage.
IMO anytime you deal with touching the file system it's always better to abstract it away a level, also makes mocking and testing alot easier.