Best Practices for Uploading Images Using AWS

Author: Serhii Semko, CTO at OS-System

In today’s development landscape, relying on application servers for file uploads is common due to its simplicity. However, this method is resource-intensive and presents scalability challenges. Here, we explore a more efficient approach using Amazon S3 and pre-signed URLs.

Traditional Approach: Using the Application Server

An application server is software that provides the infrastructure for developing, deploying, and managing applications. It bridges user requests and backend systems, handling critical tasks like data processing, security, and database connectivity.


  • Reusability: Easy adaptation of existing code.
  • Simplicity: Straightforward post-upload processing.


  • Resource Consumption: Server resources are tied up during uploads.
  • Directory Management: Temporary directories require constant oversight.
  • Scalability Issues: Difficult to scale, complicating DevOps tasks.

Optimized Solution: Amazon S3 with Pre-Signed URLs

Switching to Amazon S3 for file uploads, particularly with pre-signed URLs, offers significant improvements. Here’s the process: the application server generates a pre-signed URL, allowing clients to upload directly to S3. This reduces server load and enhances scalability.


  • Reduced Server Load: Frees up the application server.
  • Scalability: Seamlessly handles large file volumes.
  • Direct Uploads: Clients upload directly to S3, bypassing the server.

For faster uploads, consider using S3 Transfer Acceleration, which optimizes network paths to speed up data transfers.

Post-Processing of Files

Amazon S3 supports notifications for post-upload processing. When a new object is created, a notification is sent to Amazon SQS. The application server can process these messages asynchronously, keeping the application responsive.

Client-Side Processing Recommendation

For greater efficiency, shift file processing to the client side. This utilizes client resources and reduces server load, accelerating the overall workflow.

Delivering Files to Clients

AWS CloudFront, a Content Delivery Network (CDN), ensures fast, reliable file delivery by caching content at edge locations globally. Proper configuration of cache headers and deep caching significantly improves performance.


  • Fast Delivery: Low latency and high transfer speeds.
  • Scalability: Handles large traffic volumes.
  • Cache Optimization: Reduces bandwidth usage and load times.


Transitioning from server-based uploads to using Amazon S3 with pre-signed URLs, and leveraging CloudFront for content delivery, provides substantial benefits. This strategy improves scalability, resource utilization, and file handling efficiency, creating a more robust system for managing file uploads and distribution.

For more insights and details, visit

5 2 votes
Article Rating
Notify of
Inline Feedbacks
View all comments

Subscribe to us