yeah, I've implemented that temporary link system together with link expiry by date, by access count, and link passwords.
I'm encrypting the file on arrival, and storing it encrypted, so it has to route back through the decryption stream. But I could move that to a separate module and replace it with signed S3 if there was benefit.