It can be done using WebRTC with something like snapdrop.net. Still requires both devices being able to connect to their signaling server, but at least it works on every device, doesn't require you to install something, it's peer to peer, and open source.