Having a progress bar with percentage depends very much on your server environment. The %age isn't returned as part of a normal HTTP request process, so you need to simultaneously poll the server to obtain a response about the %age transfer process.
This is what some of the examples above do. Other ones appear just to spoof a %age?
Obviously this needs a server capable of delivering this information. You are also adding to the load by using continual requests to poll the server - if you have multiple progress bars, then you are talking about multiple requests + multiple pollings, which will cause quite an additional load. Particularly as simultaneous HTTP connections are limited in the browser.
You could also investigate COMET type approaches, which do various things by keeping requests alive and feeding data asynchronously that way.