Once file is opened, we could cache the contents for a period of time, so when file is being opened again or downloaded, this would use user's bandwidth and would happen immediately.
We could invalidate cache if change has happened on user's other device, user fetched S3 listing and last modified date no longer matches or when cache is removed manually.