top of page
WordPress media upload interrupted halfway between a browser and web server

WordPress Says “The Uploaded File Was Only Partially Uploaded”—How to Fix It

9 hours ago
5 min read

A WordPress upload reaches 40%, 70%, or even 99% and then ends with “The uploaded file was only partially uploaded.” That wording is useful: it maps to PHP upload error code 3, meaning the server received only part of the file. The job is to find where the transfer stopped—not to keep retrying blindly.

This is the same order we use on live sites: reproduce the failure safely, separate browser and network problems from server limits, and inspect the layer that handled the failed request.

What the message really tells you

The PHP manual defines error code 3 as a partial upload. WordPress is reporting that server-side result. Thumbnail creation and attachment metadata happen after the complete file arrives, so start with the path between the browser and PHP.

Run four low-risk tests first

  1. Upload a small, ordinary JPG through Media → Add New, then repeat with the problem file.

  2. Try the same file in a private browser window with extensions disabled and on a stable alternative connection.

  3. Upload one file at a time so a batch does not obscure the failed request.

  4. Record the exact time, filename, size, browser, and percentage shown when the failure occurs.

If every file fails from every connection, focus on the server and temporary storage. If only one large file or one network fails, you have already narrowed the search.

Check the effective limits WordPress sees

Open Tools → Site Health → Info and expand Media Handling and Server. The official Site Health documentation explains the upload, POST, and server information shown there.

  • upload_max_filesize limits one uploaded file.

  • post_max_size limits the whole request and must allow for overhead.

  • max_input_time limits how long PHP may receive input.

  • max_execution_time applies while PHP handles the request.

  • memory_limit matters especially after the file arrives.

  • max_file_uploads limits simultaneous files.

A larger upload_max_filesize alone is not a diagnosis. PHP has separate codes for exceeded limits, while error code 3 means the received body was incomplete. Still, mismatched timeouts and request limits at another layer can interrupt longer uploads.

Trace the request through each layer

Browser and network

Brief connection drops can leave the server with an incomplete body. Reproduce from another browser and connection. If an admin VPN, corporate proxy, or browser security extension is involved, test without it where policy permits.

CDN, reverse proxy, and firewall

A CDN, load balancer, web application firewall, or host security layer may enforce a smaller request-body limit or shorter timeout than PHP. Check its logs at the saved timestamp and inspect the upload request, commonly wp-admin/async-upload.php.

If the response is actually a permission error, use Webcurry’s guide to finding the rule behind a WordPress 403 error instead of weakening security globally.

Temporary storage and disk space

PHP writes an incoming upload to a temporary directory before WordPress moves it. Confirm that the active PHP process can write there and that the filesystem has free space and inodes. On container or multi-server hosting, inspect the runtime handling the request, not only the account’s headline quota.

Uploads directory

WordPress then writes under wp-content/uploads or a configured alternative. Check ownership and permissions using the host’s recommended model. The WordPress media documentation notes that correct permissions may be required. Avoid 777: it is a security problem, not a diagnostic technique.

Plugins and custom uploaders

Security, compression, offload, form, and chunked-upload plugins can intercept the request. Test on staging first. If production testing is unavoidable, disable one likely component at a time during a short maintenance window and re-enable it immediately.

For a generic Media Library HTTP Error, use the separate WordPress media HTTP Error diagnostic; it covers failures beyond this specific PHP partial-upload condition.

Use logs to stop guessing

Search the web-server error log, PHP-FPM log, proxy events, and security logs for the timestamp. Look for a closed client connection, timeout, body-size rejection, temporary-file warning, disk error, or rule ID. Enable WordPress debugging only as needed, and keep error display off on production.

A safe repair sequence

  1. Confirm the error with one known-good small file and the original file.

  2. Rule out browser, extension, and network interruption.

  3. Compare Site Health with the active PHP, proxy, and host configuration.

  4. Verify temporary-directory and uploads-directory access plus disk space.

  5. Inspect logs at the exact failure time.

  6. Test only the plugin or security layer implicated by evidence.

  7. Upload again, then confirm the attachment, file size, thumbnails, and logs.

What not to do

  • Do not set wp-content to 777.

  • Do not set every PHP limit to an extreme value.

  • Do not permanently disable the firewall or security plugin.

  • Do not change several layers at once and lose the evidence.

  • Do not assume a successful progress bar means thumbnails and metadata are intact.

If a recent extension change also made the dashboard slow, see how to isolate a slow WordPress plugin safely.

Frequently asked questions

What does “The uploaded file was only partially uploaded” mean in WordPress?

It means PHP received only part of the file and returned upload error code 3. The transfer stopped before WordPress could process the complete file, so the root cause is usually in the browser-to-server upload path rather than the Media Library itself.

Is upload_max_filesize always the cause?

No. PHP has a different error for a file that exceeds upload_max_filesize. Partial uploads more often point to an interrupted connection, a timeout, a proxy or security layer, a temporary-directory problem, or an uploader conflict.

Why does a small file upload while a large file fails?

A larger file keeps the connection open longer and is more likely to encounter a request-body limit, timeout, unstable connection, proxy rule, or lack of temporary disk space. Compare the active limits and check server logs at the exact failure time.

Can a slow internet connection cause a partial upload?

Yes. Unstable Wi-Fi or mobile data can interrupt the request before every byte reaches the server. Test the same file from a stable connection and another browser before changing server settings.

Should I set wp-content permissions to 777?

No. World-writable 777 permissions create an avoidable security risk and rarely fix this error. Use the ownership and permission model recommended by your host, and verify that WordPress can write to its uploads and temporary directories.

Where can I check WordPress upload limits?

Open Tools → Site Health → Info → Media Handling and Server. It reports the effective upload and POST limits and related PHP settings. Your hosting panel or phpinfo output can confirm the active configuration.

Can a plugin cause partial uploads?

Yes. Security, media-optimization, offload, form, and uploader plugins can change the request path or inspect uploads. Test likely candidates one at a time on staging or during a short maintenance window.

The practical takeaway

“Only partially uploaded” is a specific signal that the complete request did not reach PHP intact. Test the simplest path, compare the limits each layer actually enforces, and use timestamped logs to identify the interruption. That produces a durable fix instead of risky configuration guesses.

Recent Posts

See All

Comments


web design agency india

Address

Greenfield Colony, Faridabad, India

Contact

Mail: sv198688@gmail.com

Phone: 7065327427

Socials

  • Instagram
  • Twitter
bottom of page