Beh basta che "unisci" il codice per l'invio dei dati e dell'upload, possono convivere benissimo nello stesso form e nello stesso script.
Per un contatore non saprei come conviene farlo ma di sicuro per file molto grandi ti conviene usare la funzione
ignore_user_abort()
per lasciare completare lo script anche in caso di stop da parte dell'utente.
Ricorda poi che il server ha delle impostazioni, modificabili, sulla dimensione massima per i file da uplodare.
Ciao.