<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://janujan.github.io/</id><title>Janujan's Blog</title><subtitle>Software engineer. I productionalize things and write about what I learned along the way.</subtitle> <updated>2026-04-22T00:33:27+00:00</updated> <author> <name>Janujan Selvaratnam</name> <uri>https://janujan.github.io/</uri> </author><link rel="self" type="application/atom+xml" href="https://janujan.github.io/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://janujan.github.io/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Janujan Selvaratnam </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>Serving Fresh Files with S3 Versioning and Presigned URLs</title><link href="https://janujan.github.io/posts/s3-versioning-presigned-urls/" rel="alternate" type="text/html" title="Serving Fresh Files with S3 Versioning and Presigned URLs" /><published>2026-04-18T12:00:00+00:00</published> <updated>2026-04-18T17:22:30+00:00</updated> <id>https://janujan.github.io/posts/s3-versioning-presigned-urls/</id> <content type="text/html" src="https://janujan.github.io/posts/s3-versioning-presigned-urls/" /> <author> <name>Janujan Selvaratnam</name> </author> <category term="AWS" /> <category term="Backend" /> <summary>Serving files to clients sounds pretty boring until you have to account for the freshness of the files being served. In a recent project, I had to support serving fresh files while remaining fast and reliable in production. We’ll see what happens when files are updated as a client is in the middle of a download, and how S3 bucket versioning and presigned URLs can solve it. To understand the pr...</summary> </entry> </feed>
