By | | Updated

Cannot Upload Images to WordPress? 8 Causes and How to Fix Each One

You hit "Upload" and WordPress throws an error. Or worse — your iPhone photo doesn't even get accepted in the first place. It's the kind of problem that quietly eats an afternoon.

The good news: the cause almost always falls into one of eight buckets. Read the error message, find the matching cause below, and apply the fix.

The 8 most common causes (at a glance)

  • iPhone HEIC/HEIF format is not supported by WordPress out of the box
  • File size exceeds upload_max_filesize
  • PHP memory_limit is too low to generate thumbnails
  • wp-content/uploads lacks write permissions
  • An image optimization or security plugin is conflicting
  • .htaccess rules or a server-side WAF is blocking the request
  • Application Password is missing, or the user role can't upload
  • The Wi-Fi or mobile connection drops mid-upload

Below, each cause is paired with its exact error message and a step-by-step fix. If you upload from iPhone often, there is also a shortcut at the end that avoids most of these problems by design.

Step 1: Read the error message first

WordPress upload failures usually print a fairly specific message. Match what you see to the list below, then jump to the matching section.

  • "HTTP error" → server-side processing failed. Likely PHP memory or permissions.
  • "exceeds the maximum upload size for this site"upload_max_filesize is too low.
  • "Sorry, this file type is not permitted for security reasons" → the file extension isn't allowed (HEIC is the usual suspect).
  • "Unable to create directory"wp-content/uploads isn't writable.
  • Blank screen, no message → JavaScript error or a plugin conflict.

Cause 1: iPhone HEIC/HEIF format is not supported

iPhones save photos in HEIC by default. WordPress doesn't accept HEIC in a stock install, so the browser upload fails with "Sorry, this file type is not permitted for security reasons."

Fix (pick one)

  1. Switch the iPhone capture format. Settings → Camera → Formats → Most Compatible. Future photos will be JPEG. Existing HEIC files stay as HEIC.
  2. Convert existing HEICs to JPEG. AirDrop to a Mac auto-converts. On Windows, use CloudConvert or similar.
  3. Install a HEIC-support plugin. "WP HEIC Upload" lets WordPress accept HEIC directly.
  4. Use an iPhone app that handles HEIC. SnapPress reads HEIC and converts to JPEG on send — no iPhone setting changes needed.

For a deeper look at the HEIC pitfalls (including WordPress 6.7's partial HEIC support), see iPhone HEIC Photos and WordPress.

Cause 2: File size exceeds the upload limit

PHP's upload_max_filesize and post_max_size cap how large a single upload can be. Many shared hosts default to 2–8 MB. Modern iPhone photos are 5–10 MB each, which is over the limit out of the box.

Fix

  1. Check the current limit. WP Admin → Media → Add New shows "Maximum upload file size: XX MB" at the bottom.
  2. Edit php.ini. Set upload_max_filesize = 32M and post_max_size = 32M. Most managed hosts expose this in the control panel.
  3. Override via .htaccess. Add php_value upload_max_filesize 32M and php_value post_max_size 32M.
  4. Compress before upload. Fastest fix if you can't touch server settings. SnapPress applies 3-tier quality presets automatically.

Cause 3: PHP memory limit is too low

On upload, WordPress generates multiple thumbnail sizes. A 4000px+ original can blow past the PHP memory limit during thumbnail processing, producing a generic "HTTP error."

Fix

  1. Add define('WP_MEMORY_LIMIT', '256M'); to wp-config.php.
  2. Set memory_limit = 256M in php.ini.
  3. If the host caps memory below 256M, resize the original to ~2000px before upload to reduce processing load.

Cause 4: wp-content/uploads permissions error

Uploaded images live in wp-content/uploads. If the directory isn't writable by the web server, you get "Unable to create directory." This commonly appears right after a server migration or a manual FTP transfer.

Fix

  1. Set wp-content/uploads to 755 (or 775) via FTP/SSH.
  2. Set files inside it to 644.
  3. Confirm the directory is owned by the web server user (www-data, apache, etc.).

Cause 5: Plugin conflict

Image optimization plugins (Smush, EWWW, ShortPixel) and security plugins (Wordfence, Sucuri) both intercept the upload pipeline. When one of them updates and changes behavior, it can collide with another and break uploads while leaving the rest of the admin working fine.

Fix

  1. Deactivate all plugins, then test the upload.
  2. If it works, reactivate plugins one by one and re-test after each.
  3. Once you find the culprit, adjust its settings or swap to an alternative.

Cause 6: .htaccess or WAF blocking the request

Security-hardening .htaccess rules and host-level WAFs (mod_security, Cloudflare WAF) sometimes misclassify multipart uploads as attacks and block them.

Fix

  1. Back up .htaccess, then restore the WordPress default block and test.
  2. In the host control panel, whitelist /wp-admin/ in the WAF rules.
  3. Ask the host to check mod_security logs for blocked rules.

Cause 7: Application Password is misconfigured

If you upload from an external app or via the REST API, you need an Application Password (WordPress 5.6+). Missing passwords or insufficient user roles return 401 or 403.

Fix

  1. WP Admin → Users → Profile → Application Passwords → create a new one.
  2. Confirm the user role is Author or higher. Subscriber cannot upload media.
  3. Make sure the site runs on HTTPS. Many hosts disable Application Passwords over HTTP.

Cause 8: Unstable Wi-Fi or mobile connection

A brief connection drop mid-upload aborts the transfer. The larger the image, the more likely it is to hit a network hiccup before completing.

Fix

  1. Retry on a stable Wi-Fi connection.
  2. Add set_time_limit(300); to wp-config.php to extend the timeout.
  3. Use an app with background upload and automatic retry. Mobile browsers often pause uploads the moment the tab goes to the background.

If iPhone uploads keep failing, a dedicated app is the shortest path

If you enjoy debugging server config, the eight fixes above will get you there. But if you upload from iPhone routinely, doing this every time is exhausting.

SnapPress is a dedicated iOS app for bulk uploading photos to WordPress. It is designed so most of the problems above never happen in the first place:

  • Reads HEIC directly and converts to JPEG on send
  • 3-tier quality presets auto-adjust file size to stay under the server limit
  • Initial setup uses QR code to issue an Application Password automatically
  • Talks to the WordPress REST API directly, sidestepping browser-side plugin conflicts
  • Up to 20 photos in a single batch with per-file retry on failure

Free to start (10 uploads/month), no account signup. Standard is $0.99/month or a $4.99 one-time lifetime purchase, with Apple's 14-day refund policy.

For broader Media Library workflow and maintenance, also see The Complete Guide to the WordPress Media Library.

Quick-reference: first thing to try, by symptom

Symptom First thing to try
Only iPhone photos fail Switch iPhone Camera Format to "Most Compatible," or use SnapPress
"Exceeds the maximum upload size" Raise upload_max_filesize to 32M+, or compress the photo
"HTTP error" Set WP_MEMORY_LIMIT to 256M
"Unable to create directory" Set wp-content/uploads to 755
Intermittent or unexplained failures Deactivate plugins one by one to isolate the conflict

Frequently asked questions

What if I don't have access to change server settings?

Many managed hosts (SiteGround, Kinsta, WP Engine, Bluehost, Hostinger) expose upload_max_filesize and memory_limit in a "PHP settings" panel. If even that isn't available, compressing images before upload or letting a dedicated app handle it is the practical workaround.

Does this also apply to WordPress.com?

WordPress.com applies different upload limits and supported formats per plan. HEIC isn't accepted on most plans. The Business plan and above expose the REST API, so external apps like SnapPress work there.

What if isolating the plugin doesn't fix it?

The theme may be the issue. Switch temporarily to a default theme (Twenty Twenty-Four) and retry. If the error disappears, the theme is the cause — report it to the developer or migrate to another theme.

Uploads broke right after a server migration

Almost always a permissions issue. Check the owner and mode of wp-content/uploads via FTP/SSH and re-set if needed. Also verify that wp-config.php has the correct database credentials for the new server.

Uploads work from phone but not from my computer

Likely a browser cache or extension issue. Try an incognito window, a different browser, or disable extensions one by one. Also check that the admin URL is fully HTTPS — mixed content can silently break uploads.

If you upload from iPhone and keep running into these errors:

SnapPress handles HEIC, file-size limits, and Application Password setup automatically — one tap to scan a QR code and you're done. Free to start, try it now.

See SnapPress