added recursive upload (uploadDir)