Ordnerupload ist nicht so einfach.
Im Dateisystem gibt es eigentlich zwei Arten von Dateien: Dateien und Ordner.
Ordner sind auch nur Dateien, die zwei besondere Eigenschaften haben: ein parent und mehrere Children.
Es ist also gar nicht möglich, einfach nur einen Ordner hochzuladen.
Du musst die komplette Ordnerstruktur (idealerweise ohne parent) hochladen.
Also den aktuellen Ordner (current), all seine Kinder (children) sowie all deren Kinder (grandchildren) und deren Kinder (grandgrandchildren) und so weiter.
Ergo benötigst Du eine rekursive Uploadfunktion.
Nun hast Du weiterhin das Problem, dass während des rekursiven Uploads irgendwas schief gehen kann. Internet weg. Serverplatte voll. Nutzer muss sich gegen Angriff eines Flugsauriers wehren und wirft dem das Smartphone an den Kopf, wodurch es sich ausschaltet. Irgendwas halt.
Auf den Fall eines Abbruchs musst Du also auch sauber reagieren können. Und der Nutzer möchte dann idealerweise an dem Punkt weiter machen, an dem er unterbrochen wurde.
(Beispielsweise fünf Tage nach der Sache mit dem Flugsaurier – der arme Mensch, diese ganzen Interviews und Termine…)
ownCloud, DropBox, Google Drive und Konsorten arbeiten ja mit den selben Problemen nach den selben Prinzipien.
Wenn das also mehr so eine Privatsache ist, solltest Du vielleicht über eine ownCloud Installation nachdenken.
Die kannst Du ja über deren API ansteuern.
Und wenn es wirklich unbedingt sein muss, kannst Du an Hand derer Implementierung ungefähr sehen, was da auf Dich zu kommt, wenn Du auch so einen Sync Service schreiben willst.
ownCloud Klassendiagramm