Upload files framework