S3 Uploader (GitHub Pages)
Static browser UI for one-off bulk uploads to an S3 bucket via simple PUT requests.
Features
- Drag-and-drop file selection
- Simple PUT uploads (anonymous-compatible, no auth required)
- Multiple files uploaded in parallel
- Per-file and overall progress bars
- Bucket, region, and prefix configurable via query parameters
- No backend required (works from GitHub Pages)
Files
index.html
styles.css
app.js
Deploy to GitHub Pages
- Push these files to a GitHub repository.
- In GitHub repo settings, enable Pages from your preferred branch/folder.
- Open the Pages URL and run uploads from there.
Required S3 setup (public write for one-off use)
This app sends unsigned browser requests directly to S3. The bucket policy must temporarily allow anonymous PUT uploads.
Example bucket policy (temporary)
Replace YOUR_BUCKET_NAME.
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "TemporaryAnonymousWrite",
6 "Effect": "Allow",
7 "Principal": "*",
8 "Action": "s3:PutObject",
9 "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
10 }
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "TemporaryAnonymousWrite",
6 "Effect": "Allow",
7 "Principal": "*",
8 "Action": "s3:PutObject",
9 "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
10 }
Example CORS configuration
Replace https://<your-user>.github.io with your GitHub Pages origin.
1[
2 {
3 "AllowedHeaders": ["*"],
4 "AllowedMethods": ["GET", "POST", "PUT", "DELETE", "HEAD"],
5 "AllowedOrigins": ["https://<your-user>.github.io"],
6 "ExposeHeaders": ["ETag", "x-amz-request-id", "x-amz-id-2"],
7 "MaxAgeSeconds": 3000
8 }
1[
2 {
3 "AllowedHeaders": ["*"],
4 "AllowedMethods": ["GET", "POST", "PUT", "DELETE", "HEAD"],
5 "AllowedOrigins": ["https://<your-user>.github.io"],
6 "ExposeHeaders": ["ETag", "x-amz-request-id", "x-amz-id-2"],
7 "MaxAgeSeconds": 3000
8 }
Usage
- Enter bucket, region, optional key prefix.
- Drag files onto the drop zone.
- Click Start Upload.
- Monitor per-file and overall progress bars.
- After upload is complete, make the bucket private again.
Query parameters
Bucket, prefix, and region can be pre-filled via URL query parameters:
https://<your-user>.github.io/s3-uploader/?bucket=my-bucket&prefix=uploads®ion=us-west-2
Notes
- Simple PUT uploads have a 5 GB file size limit (S3 hard limit).
- If your bucket name contains dots and TLS/endpoint issues occur, enable path-style mode in the UI.
- This is intentionally for temporary, one-off uploads. Do not leave anonymous write policies enabled.