implement upload task (#6)