Question

Wordpress: The uploaded file could not be moved to wp-content/uploads/

Hey guys, I’m having an issue with not being able to upload media onto the wordpress site. Plugins update and install normally, but if i try to upload a pic for a post, it gives me the error “The uploaded file could not be moved to wp-content/uploads/2016/03/”. I checked to make sure that www-data has access over my website root folder. I did the same with my FTP user. I even changed wp-content and uploads perms to 777. Nothing works. If you have a solution, it would be appreciated.

Show comments

Submit an answer


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Accepted Answer

|Solution!| So basically after having a head-ache with permissions and ownership, I came across the final solution. I have a secure ftp user called ‘wp-user’ which I got from the tutorial here a while back. Apparently the fix is very simple, and it’s not a permissions issue.

During the set up process you define FTP Components in wp-config with the following lines:

define('FTP_PUBKEY','/home/wp-user/wp_rsa.pub');
define('FTP_PRIKEY','/home/wp-user/wp_rsa');
define('FTP_USER','wp-user');
define('FTP_PASS','');
define('FTP_HOST','127.0.0.1:22');

All you have to do is move those lines above the line which says:

/* That's all, stop editing! Happy blogging. */

Apparently the media uploader freaks out when the FTP Components are below that line, despite the plugin updater working fine. Hope this helps anyone who had this similar issue.

If the problem persists even after fixing owniership and permissions, you might be having an SELinux problem. You’ll need to create a policy to assign the httpd_sys_rw_content_t selinux security context for the wp-uploads directory and all child files, or for the whole Wordpress directory while you are still configuring it.

You can check extended selinux permissions with:

ls -lZ 

Make sure you use the full path of your wp-content/uploads dir. Example:

Create policy to enable writing contect to the wp uploads dir and sub-files:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wordpress/wp-content/uploads(/.*)?"

While you are configuring wordpress, you might want to temporarily enable writing to the whole wordpress directory with the chcon command. These changes will not survive a file system relabel or the execution of the restorecon command. You can do this with:

sudo chcon -t httpd_sys_rw_content_t /var/www/html/wordpress/

The chcon command assigns the selinux security contect temporarily and then once you are done either or both of the above commands, you need to run restorecon to revert the chcon temporary alterations and to also store the permanent security policy changes made by fcontext

sudo restorecon -v /var/www/html/wordpress/

Whatever you do, don’t disable SELinux or put it in permissive mode. Don’t chmod 777 any directory or files. Its bad security policy. Instead, study how SELinux works and use it properly!

Hope this helps!

(this was done on a CentOS install)

Thank you. Fixed the problem…

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.