The easiest method I can think of to get an estimate is to upload a file to a server and measure how long it takes. Should give a reasonable guess, but like all of these things, it can only be a guess. In this example latency to WRI's servers may add a lot.
file = "mytestfile";
time = AbsoluteTiming[CopyFile[file, CloudObject["speedtest"]]]
size = FileSize[file]
speed = size/Quantity[time, "Seconds"]
So in this case it gives my speed as
2.72MB/s. This is reasonably close to my actual upload speed of
5MB/s. I re-ran and it gave me
4.74MB/s, which is pretty on the money. You could use
RepeatedTiming instead of
AbsoluteTiming to give a better estimate, but how long you want to run for and the size of the file is pretty much up to you.
You can replace
ftp link, a
Url and other options described in the documentation if you don't have a Wolfram Cloud account. This also allows you to control for the download speed of the server you're sending the file to.