Uploading works as follows, regardless of the technique used.
First you have a client and a server. The server just listens for any incoming signal.
The client connects to the server saying: "hi, I want to use you." The server responds: "sure, go ahead, and start a connection to this port" (the client now becomes the sender part, instead of the initial job of the server).
The client initiates a command stating to the server that it wants to upload anything, say... a file.
The server accepts and prepares to receive the file.
The client now starts sending the file as how TCP/IP would do it: sending 1 packet waiting for the server to respond that it has received it, then sending the next 2, waiting for the response, etc. This process is continued until the file has been transmitted. This stage is seen as uploading from a client's perspective, and downloading from a server's perspective.
In a torrent it works the same way. You first download the file from different clients who upload their data to you then you start uploading to other clients and they download from you.
A server in a torrent is a machine who keeps track of who has which bits of the file and where someone can download from. Instead of telling to the client, you can download from me, it says, you can download from client x, the same way as it will refer other clients to your client.
Note that with a torrent, you do not start uploading when your download is complete, but rather as soon as you have something to offer. Say you downloaded 10kb of a 1mb file, then someone else can already download those 10kb from you.