WordPress User Cannot Upload Media - Permissions Fix

You click "Add Media" in WordPress.

You select an image file.

You hit upload.

And then nothing happens. Or you see one of these:

  • "HTTP Error"
  • "403 Forbidden"
  • "File exceeds maximum upload size"
  • "Sorry, you don't have permission to upload files"
  • "Uploads are not allowed"
  • Upload progress bar hangs at 95%
  • No error message, just silently fails

Media uploads are broken. Users can't add images. Blog posts sit incomplete. The whole publishing workflow stops.

A client experienced this with their WordPress multisite. Guest contributors could upload images yesterday. Today, all uploads fail with no error message.

Turned out the hosting provider ran out of disk space during a routine backup. The uploads folder couldn't write files anymore. Every upload attempt failed silently.

Media upload failures happen for very specific reasons. Most are permissions-related. Some are configuration. But they all have fixes.


Why Media Uploads Fail

Understanding the cause narrows your troubleshooting significantly.

  • Folder permissions wrong: wp-content/uploads folder isn't writable
  • File permissions wrong: Individual files can't be created
  • Disk space full: No space left on server for new files
  • Upload size limit: File is larger than PHP or server allows
  • MIME type blocked: File type (jpg, png, etc.) is forbidden
  • User doesn't have permission: User role can't upload media
  • Plugin conflict: A plugin is blocking uploads
  • Memory limit too low: Processing the image exceeds PHP memory
  • Timeout: Upload takes too long and times out
  • Database error: Can't save upload metadata to database

Step 1: Check User Permissions First

Before checking server issues, verify the user has permission to upload.

Check user role

  1. Log in as an admin
  2. Go to Users
  3. Click the user who can't upload
  4. Look at "Role"
  5. Check what it's set to

Roles that can upload media

User Role Can Upload Media? Notes
Administrator Yes Full permissions
Editor Yes Can upload and manage
Author Yes (usually) Can upload but can't manage others' uploads
Contributor No (by default) Can't upload or manage media
Subscriber No Viewing only
Custom Role Depends Check if "upload_files" capability is assigned

Fix: Give user upload permission

  1. Go to Users > [User name]
  2. Change Role to "Author" or "Editor"
  3. Click "Update User"
  4. Have the user try uploading again

If custom role, add upload capability

  1. Install "User Role Editor" plugin (free)
  2. Go to Users > User Role Editor
  3. Select the custom role
  4. Check the "upload_files" capability
  5. Click "Update Role"

Step 2: Check wp-content/uploads Folder Permissions

This is the most common cause. The uploads folder isn't writable by the web server.

Check folder permissions via FTP

  1. Connect via FTP
  2. Navigate to wp-content/
  3. Right-click on the "uploads" folder
  4. Select "File Permissions" or "Properties"
  5. Check the permissions number (usually shown in octal, like 755 or 777)

Correct upload folder permissions

The uploads folder should be writable. The correct permission is 755 or 775.

Permission Readable? Writable? Usable for Uploads?
755 Yes No (web server often can't write) Sometimes
775 Yes Yes (recommended) Yes
777 Yes Yes (but insecure) Yes
644 Yes No No

Fix folder permissions via FTP

  1. Right-click "uploads" folder
  2. Click "File Permissions" or "Properties"
  3. Change permission to 775
  4. Apply recursively (to all files inside)
  5. Save
  6. Try uploading again

Fix via SSH/Terminal

chmod -R 775 wp-content/uploads

Fix via cPanel File Manager

  1. Log into cPanel
  2. Go to File Manager
  3. Navigate to wp-content/uploads
  4. Right-click > Change Permissions
  5. Set to 775
  6. Check "Recurse into subdirectories"
  7. Click "Change Permissions"

Step 3: Check Disk Space

If your server has no disk space, you can't upload anything.

Check disk usage via cPanel

  1. Log into cPanel
  2. Go to "Disk Space Usage"
  3. Check if you're at or near 100%

Check disk usage via SSH

df -h

Look for your WordPress partition. If Usage% is 100%, you're full.

If disk is full

  1. Delete old backups (ask hosting first)
  2. Empty trash/recycle bin
  3. Delete unused plugins and themes
  4. Move old media to external storage
  5. Compress old database backups
  6. Contact hosting to upgrade disk space

Most hosting providers give you 24 hours to free up space before suspending the account.


Step 4: Check PHP Upload Size Limits

PHP has maximum file size limits. If your image exceeds these, upload fails.

Check current limits in WordPress

  1. Log in to wp-admin
  2. Go to Media
  3. Under the upload area, you'll see "Maximum upload file size: XXX MB"
  4. That's your current limit

Common upload size issues

Limit Common Default Usually OK For
upload_max_filesize 2MB or 8MB Small images only
post_max_size 8MB or 16MB Small images and files
max_execution_time 30 seconds Quick uploads only

Increase upload limits via wp-config.php

  1. Connect via FTP
  2. Open wp-config.php
  3. Add these lines BEFORE "That's all, stop editing!":
    define( 'WP_MEMORY_LIMIT', '256M' );
    define( 'WP_MAX_MEMORY_LIMIT', '512M' );
    @ini_set( 'upload_max_filesize', '128M' );
    @ini_set( 'post_max_size', '128M' );
  4. Save and upload
  5. Go back to Media
  6. Check if "Maximum upload file size" has increased

If that doesn't work, use .htaccess

Add this to your .htaccess file (in WordPress root):

php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value max_execution_time 300

If still not working, contact hosting

Some hosting providers cap upload sizes at the server level. Contact them and ask for the limit to be raised to at least 64MB.


Step 5: Check MIME Type Restrictions

WordPress blocks certain file types by default. Some file types are blocked for security.

Which file types are allowed by default

  • Images: jpg, jpeg, png, gif, webp
  • Documents: pdf, doc, docx, xls, xlsx, ppt, pptx
  • Audio: mp3, m4a, ogg, wav
  • Video: mp4, mov, wmv, avi, webm

File types blocked by default

  • Executables (.exe, .bat, .com)
  • Scripts (.php, .php3, .php5, .phtml, .phps)
  • Archives (.zip, .rar, .7z) — usually blocked
  • SVG files — sometimes blocked

Add file type permission via plugin

  1. Install "Custom Post Type UI" or "File Manager"
  2. Go to Settings > Media
  3. Some plugins add a "Allowed File Types" option
  4. Add your file type (e.g., svg, zip)
  5. Save

Add file type via code

Add this to your theme's functions.php:

add_filter( 'upload_mimes', function( $mimes ) {
    $mimes['svg'] = 'image/svg+xml';
    $mimes['zip'] = 'application/zip';
    return $mimes;
} );

Step 6: Check for Plugin Conflicts

A plugin might be intercepting or blocking uploads.

Test with plugins disabled

  1. Log in to wp-admin
  2. Go to Plugins > Installed Plugins
  3. Deactivate all plugins (there's a bulk action dropdown)
  4. Try uploading media
  5. If it works, a plugin was blocking uploads
  6. Reactivate plugins one at a time to find the culprit

Common plugins that conflict with uploads

  • Security plugins: Wordfence, iThemes Security (too restrictive)
  • Image optimization: Smush, ShortPixel (timeout during processing)
  • Custom file handlers: Any plugin that rewrites upload logic
  • Backup plugins: UpdraftPlus, Backup (if running during upload)

Tip: Check plugin settings for "disable on media upload" or "whitelist upload folder" options.


Step 7: Check Memory Limits

Processing large images requires memory. If WordPress runs out of memory, uploads fail.

Check PHP memory limit

  1. Log in to wp-admin
  2. Go to Tools > Site Health
  3. Look for "PHP memory limit"
  4. It should show something like "128M" or "256M"

Increase memory limit via wp-config.php

  1. Open wp-config.php
  2. Add this line:
    define( 'WP_MEMORY_LIMIT', '256M' );
  3. Save and upload
  4. Go back to Site Health
  5. Refresh and check if memory limit increased

If that doesn't work, increase via .htaccess

php_value memory_limit 256M

If still failing, contact hosting

Some hosting restricts memory per request. Ask them: "Can you increase the PHP memory limit to 256MB for my account?"


Step 8: Check Upload Progress Handler

The upload progress handler sometimes conflicts with certain servers.

Disable upload progress handler

  1. Add this to wp-config.php:
    define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );
  2. Save and upload
  3. Try uploading again

If that fixes it, the upload handler was conflicting with your server setup.


Step 9: Check Database Connection

WordPress stores upload metadata in the database. If the database can't be written to, uploads fail silently.

Test database connection

  1. Log in to wp-admin
  2. Go to Tools > Site Health
  3. Look for "Database" section
  4. It should show "Connected" or similar

If database shows error

  1. Check your database credentials in wp-config.php
  2. Make sure they're correct
  3. Try uploading again

If database connection is failing

Contact hosting support. Tell them: "My WordPress database connection is failing. Can you verify the database server is running and my credentials are correct?"


Step 10: Enable Debug Logging to See Actual Errors

Enable WordPress debug mode to see what's actually failing.

Enable debug logging

  1. Open wp-config.php via FTP
  2. Add these lines BEFORE "That's all, stop editing!":
    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_DISPLAY', false );
    define( 'WP_DEBUG_LOG', true );
  3. Save and upload
  4. Try uploading media
  5. Download the debug.log file from wp-content/
  6. Search for "upload" or "media" errors

Common debug errors

Error Message Cause Fix
"Unable to create directory" Folder permissions wrong chmod -R 775 wp-content/uploads
"Disk quota exceeded" Disk space full Free up disk space or upgrade
"Allowed memory exhausted" Memory limit too low Increase WP_MEMORY_LIMIT
"Maximum execution time exceeded" Upload timeout Increase max_execution_time
"File type not allowed" MIME type blocked Add to allowed MIME types

Real-World Upload Failure Story

Scenario: A WordPress site with thousands of images had tight security. The wp-content/uploads folder had permissions set to 755. Upload was disabled. The admin couldn't figure out why.

What happened:

  1. Initial setup had uploads folder set to 755 (read-only)
  2. This worked for a few years with just the admin uploading
  3. Then they added contributors
  4. Contributors couldn't upload because the folder wasn't writable
  5. Admin didn't realize the permission was the issue
  6. Admin thought the plugin was broken
  7. Admin reinstalled the media plugin multiple times

Our fix:

  1. Checked wp-content/uploads permissions (found 755)
  2. Changed to 775
  3. Contributors immediately could upload

Why this matters: Permissions are the silent killer. They don't always show errors. They just silently fail.


Media Upload Troubleshooting Checklist

Can't upload media?

  • āœ“ Verify user has upload permission (role is Author or Editor)
  • āœ“ Check wp-content/uploads folder permissions (should be 775)
  • āœ“ Verify disk space isn't full (check in cPanel)
  • āœ“ Check maximum upload size (should be 64MB+)
  • āœ“ Verify file type is allowed (jpg, png, gif are standard)
  • āœ“ Disable all plugins and test
  • āœ“ Check PHP memory limit (should be 256MB+)
  • āœ“ Increase WP_MEMORY_LIMIT in wp-config.php
  • āœ“ Test database connection in Site Health
  • āœ“ Enable debug logging to see actual errors
  • āœ“ Try uploading from different browser/device
  • āœ“ Contact hosting if nothing works

Prevention: Keep Uploads Working

1. Monitor disk space

Set up email alerts in cPanel. Most hosting sends alerts at 80%, 90%, and 100% capacity.

2. Optimize images

Install Smush or ShortPixel. Automatically compress uploads so they take less space.

3. Archive old uploads

Don't keep years of media on the live server. Archive old posts to backup storage.

4. Set correct permissions on installation

Right after installing WordPress, set wp-content/uploads to 775 and leave it there.

5. Test uploads after site changes

After moving domains, migrating servers, or adding plugins, test media upload immediately.

6. Keep plugins updated

Image plugins especially need updates. Outdated versions conflict with newer servers.


Quick Permission Reference

Essential WordPress folder permissions

Folder Recommended Permission Why
wp-content/uploads 775 Needs to be writable for media
wp-content/plugins 755 Needs to be readable, writable for installs
wp-content/themes 755 Readable, writable for updates
wp-config.php 644 Readable only (not writable)
.htaccess 644 Readable by server

When to Contact Hosting Support

Contact them if:

  • You can't access FTP or cPanel to check permissions
  • Disk space shows full in cPanel
  • You've increased memory and upload limits but still failing
  • You need them to whitelist your file type at server level
  • Site Health shows database connection errors
  • You've tried all these steps and uploads still fail

What to tell them:

"WordPress media uploads are broken. I've checked folder permissions (775), increased PHP memory to 256MB, and verified disk space. Can you check if there are any server-level upload restrictions or database issues?"

Most hosting fixes this in 1-2 hours.


The Real Talk

Media upload failures feel like WordPress is broken. But they're almost always one of five things:

  1. Folder isn't writable (permissions)
  2. Disk is full (space)
  3. File is too big (limits)
  4. User can't upload (role)
  5. Plugin is interfering (conflict)

These are deterministic. They can always be fixed. There's no mystery here.

Start with permissions. 80% of upload failures are permission issues. Then check disk space. Then check limits. Then test with plugins disabled.

Follow this order and you'll find the problem every time.

Your media uploads will work again. You just need to know where to look.