The Town Nerd

Large Recording Uploads to Amazon S3

In 2024, one customer needed a way for global teams to send in finished recordings, organized by series and episode. Many of the team members don’t speak English as a first language, and each recording can run to several gigabytes. I built a one-page web app for it. A team fills in a form, drops in their files and clicks Upload, and the recordings land in the customer’s Amazon S3 bucket. The files go straight from the browser to S3, so the web server never handles a byte of them.

What It Does

The page uses Angular and Angular Material, with Dropzone.js for drag-and-drop and chunking. The only server code is a single PHP script using the AWS SDK. There’s no database and no framework to keep upgraded, so hosting it means copying a folder to any PHP server.

Its Limits

Anyone with the link can upload. Keeping the link unpublished is the access control, which keeps things easy for teams who would struggle with logins. It’s still a risk: an open upload form lets strangers put malicious files in your bucket, and run up your bill for storage.

To limit the damage, the PHP script has its own AWS user with a strict IAM policy that allows nothing but uploads, and bucket versioning means any overwritten file can be restored.

Where It Is Now

It’s still in use, and received over 1 TB of recordings in its first two years. The only maintenance it has needed came when the customer received its first file over 5 GB. AWS limits POST uploads to 5 GB, so I switched the uploads from POST to PUT.