This is exactly the use case for Magic Wormhole, which is what the cool kids use to transfer files:

https://github.com/magic-wormhole/magic-wormhole

Magic Wormhole uses an end-to-end PAKE to create an encrypted transport between two points in the Internet, using a rendezvous server.

It doesn't store files, which is almost never what you want; it's not a way to send a file and have 10 or 100 people download it. But it's probably the best way to get a file through a bunch of arbitrary network controls, NATs, &c to a desired destination. There's a Go implementation as well:

https://github.com/psanford/wormhole-william

... which is what I use most of the time. If you haven't played with it, I highly recommend it.