Well, at its core, copying a file is just opening two different files, then read a chunk from one and writing it to the other. The chunk size can have a huge effect on speed, but I don't have any particular advice for network transfers. Start on the order of bytes and do some benchmarking to see what works best in your situation. Or you could get really ambitious and code it to be adaptive You should only need Open/Read/Write/Close nodes and those are all in the file palette.
To implement a progress indicator (easily) you could use a functional global, storing in (bytes written)/(size of source file) and read it back where ever you'd like.