I’ve integrated Amazon S3 successfully but I didn’t use the presigned URLs. I just use a base64-encoded/signed policy and API key.
To do this securely you would have to put the key and the policy on a server (building a simple REST API using nodejs/expressjs), but this applies to pre-signed URLs as well - you need a server to generate them securely.
So in the end I didn’t see the advantage of the pre-signed URLs over the conventional approach.