How to upload large file > 5MB in laravel 5

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Mastering Large File Uploads in Laravel: Beyond php.ini Settings

Uploading large files, such as 10MB images, often presents a common hurdle for developers working with web applications built on PHP and Laravel. When standard settings fail, it’s rarely just about adjusting a few lines in php.ini; it involves understanding the entire stack—from the web server to the PHP configuration and finally, how Laravel handles the persistence of that data.

As a senior developer, I can tell you that while modifying post_max_size, memory_limit, and upload_max_filesize in php.ini is the first step, it often only addresses the PHP execution limits, not necessarily the limitations imposed by your web server (like Apache or Nginx) or file system permissions.

Here is a comprehensive guide on troubleshooting large file uploads in a Laravel environment and implementing robust solutions.

Troubleshooting the PHP Configuration Layer

The settings you mentioned are crucial for allowing PHP to process larger requests:

ini
post_max_size = 500M;
memory_limit = 500M;
upload_max_filesize = 500M

If these settings don't work, the issue is likely occurring before PHP even processes the file upload. You must also check:

  1. Web Server Limits: If you are running Apache or Nginx, they often have their own limits on request body size that must be configured separately (e.g., LimitRequestBody in Nginx).
  2. File System Permissions: Ensure the directory where the files are being saved has write permissions for the web server process (e.g., www-data).
  3. Server Timeout: Very large uploads can time out if the upload takes too long, which relates back to max_execution_time.

For robust development practices, understanding how frameworks manage these interactions is key. For deeper insights into Laravel architecture and best practices for handling data persistence, exploring resources like laravelcompany.com is highly recommended.

Implementing Robust File Handling in Laravel

Relying solely on saving large files directly to the local disk can lead to server overload and scalability issues, especially as your application grows. A more scalable approach involves offloading file storage.

1. Using Laravel Storage (Local Disk Strategy)

If you must store files locally, use Laravel’s built-in Filesystem abstraction rather than raw PHP functions. This keeps your code cleaner and leverages framework features:

php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class ImageController extends Controller
{
    public function upload(Request $request)
    {
        $request->validate([
            'image' => 'required|file|max:10240' // Validate file size here too! (10MB = 10240KB)
        ]);

        if ($request->hasFile('image')) {
            $file = $request->file('image');
            
            // Store the file in the 'public' disk (which maps to storage/app/public)
            // This uses Laravel's configured disk settings.
            $path = $file->store('profile_images', 'public'); 

            // Save the path to the database instead of the file itself
            // User::where('id', $userId)->update(['image_path' => $path]);

            return response()->json(['message' => 'File uploaded successfully. Path: ' . $path], 200);
        }

        return response()->json(['error' => 'No file provided'], 400);
    }
}

2. The Scalable Solution: Cloud Storage (S3)

For truly large files or high-traffic applications, the recommended approach is to use cloud storage services like Amazon S3. This shifts the burden of storage and scaling away from your web server and into a dedicated, highly available service.

Laravel integrates seamlessly with S3 using packages or built-in features. This ensures that even multi-gigabyte file uploads are handled reliably without hitting local disk capacity limits. When implementing cloud storage strategies, always review documentation on data management patterns; for example, when designing your application logic, paying attention to how Laravel structures services and repositories can save significant development time.

Conclusion

Uploading large files successfully requires a layered approach. Start by meticulously checking the configuration of your web server and PHP settings. If those fail, transition to using framework-specific tools like Laravel's Storage system, and for enterprise-level scalability, migrate file storage to cloud solutions like S3. By combining correct system tuning with smart architectural choices, you ensure your application can handle any size of data efficiently.