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_limitis too low to generate thumbnails wp-content/uploadslacks write permissions- An image optimization or security plugin is conflicting
.htaccessrules 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_filesizeis 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/uploadsisn'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)
- Switch the iPhone capture format. Settings → Camera → Formats → Most Compatible. Future photos will be JPEG. Existing HEIC files stay as HEIC.
- Convert existing HEICs to JPEG. AirDrop to a Mac auto-converts. On Windows, use CloudConvert or similar.
- Install a HEIC-support plugin. "WP HEIC Upload" lets WordPress accept HEIC directly.
- 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
- Check the current limit. WP Admin → Media → Add New shows "Maximum upload file size: XX MB" at the bottom.
- Edit php.ini. Set
upload_max_filesize = 32Mandpost_max_size = 32M. Most managed hosts expose this in the control panel. - Override via .htaccess. Add
php_value upload_max_filesize 32Mandphp_value post_max_size 32M. - 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
- Add
define('WP_MEMORY_LIMIT', '256M');towp-config.php. - Set
memory_limit = 256Minphp.ini. - 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
- Set
wp-content/uploadsto 755 (or 775) via FTP/SSH. - Set files inside it to 644.
- 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
- Deactivate all plugins, then test the upload.
- If it works, reactivate plugins one by one and re-test after each.
- 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
- Back up
.htaccess, then restore the WordPress default block and test. - In the host control panel, whitelist
/wp-admin/in the WAF rules. - Ask the host to check
mod_securitylogs 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
- WP Admin → Users → Profile → Application Passwords → create a new one.
- Confirm the user role is Author or higher. Subscriber cannot upload media.
- 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
- Retry on a stable Wi-Fi connection.
- Add
set_time_limit(300);towp-config.phpto extend the timeout. - 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