Back to Engineering Notes
Laravel ConceptsEngineering Note

12. File Storage (AWS s3)

I use AWS S3 to store and manage files in a scalable, secure, and production-ready way, supporting both public and private access patterns.

🧠 File Storage (AWS S3 — Public & Private)

I use AWS S3 to store and manage files in a scalable, secure, and production-ready way, supporting both public and private access patterns.


🎯 Simple Idea

Public files → directly accessible via URL
Private files → restricted, accessed via signed URLs

👉 same storage, different access control strategy


🧩 Public Storage

Used for non-sensitive, publicly accessible files:

images
avatars
static assets

Upload

plain text
Storage::disk('s3')->put('avatars/user.jpg', $file, 'public');

Retrieve

plain text
$url = Storage::disk('s3')->url('avatars/user.jpg');

👉 accessible directly via S3 or CDN (e.g., CloudFront)


🧩 Private Storage

Used for sensitive or protected files:

documents
reports
user uploads

Upload

plain text
Storage::disk('s3')->put('documents/report.pdf', $file, 'private');

Retrieve (Secure Access)

plain text
$url = Storage::disk('s3')->temporaryUrl(
    'documents/report.pdf',
    now()->addMinutes(5)
);

👉 generates a time-limited signed URL after backend permission check


🧠 Why I Use This

scalable storage (no server disk limitation)
secure access control for sensitive data
efficient delivery with CDN support
reliable handling of large files

⚖️ Trade-offs

dependency on AWS infrastructure
cost based on storage + bandwidth
requires proper IAM and permission setup

📌 Practical Rule

👉 Public → static assets (direct URL access)

👉 Private → sensitive data (signed URL access)


💬 Summary

I use AWS S3 to:

upload and store files efficiently
retrieve public files via direct URLs
securely retrieve private files using temporary signed URLs

👉 enabling systems that are scalable, secure, and production-ready 👍