Beginner's Guide for WordPress - Start your WordPress Blog in minutes.
Choosing the Best
WordPress Hosting
How to Easily
Install WordPress
Recommended
WordPress Plugins
View all Guides

How to Change the Default Media Upload Location in WordPress 3.5

Last updated on by
Follow WPBeginner on YouTube
How to Change the Default Media Upload Location in WordPress 3.5

The new Media Uploader in WordPress 3.5 is probably the most important change of this release. Another important but less talked about change is the disappearance of the option to change the upload directory path from Settings. The reason for removing this option from the UI was that it is not as commonly used as other options. It also has the potential of creating chaos if the user accidentally changes it. Removing it will simplify the UI with just a check box for year/month folder organization. In this post we will show you how to change the default media upload location in WordPress 3.5.

Note: This tutorial is not for beginners. Use it only if you know what you are doing.

In order to change the default media upload location, you need to edit the wp-config.php file located in the root directory of your WordPress installation. If you want upload directory to be wp-content/files then you will need to place the following code in wp-config.php

 
define( 'UPLOADS', 'wp-content/'.'files' ); 

If you want the upload directory to be outside wp-content, like http://www.example.com/files/ then you need to set upload path in wp-config.php like this:

 
define( 'UPLOADS', ''.'files' ); 

Remember you can still choose whether or not you want uploaded files to be organized in month/year folders in Settings » Media.

Media Settings in WordPress 3.5

Hopefully you found this article to be helpful. If you have any questions, feel free to leave a comment below.

Source:

Function Reference /wp_upload_dir – WordPress Codex

WordPress Trac #21720


Editorial Staff at WPBeginner is a team of WordPress lovers led by Syed Balkhi. Page maintained by Syed Balkhi.

WPBeginner's Video Icon
Our HD-Quality tutorial videos for WordPress Beginners will teach you how to use WordPress to create and manage your own website in about an hour. Get started now »
  • http://nicoblog.org Nico

    How to change media library folder on 4.0?

  • http://www.wpbeginner.com/ WPBeginner Staff
  • http://www.wpbeginner.com/ WPBeginner Staff

    Yes it is possible. The best way is by using a CDN Service. This provides better redundancy and makes your website faster.

    However if you just want to change media upload directory and speed is not your concern then you should look at wp-ftp-media-library.

  • Somesh

    I want to use a different sub.domain how to move and change the path to that sub domain address

  • HasaN

    i change my upload path
    but my old featured image and media links are now change to new path and broken !
    i want just links and path of new media that upload being change to new path

  • ali es

    hi . how change address upload media to server.I do not speak English and I have translated the text with Google Translate., Please guide me
    Thanks

  • Jovin

    If i change the uploads directory .should i change all my previous uploads to the new directory?

    • http://www.wpbeginner.com/ WPBeginner Support

      First, make sure you backup your existing upload directory before changing the default media upload location in WordPress. You can leave your old uploads directory as it is so that older media on your site is not broken. However, if you don’t want to use older media uploads directory at all then you should know that media locations in your posts, pages, widgets are hardcoded URLs so they will not change themselves. You can try to import external images and check your site for broken links to make sure that all images on your site are appearing correctly.

      • Jovin

        Thanks for the reply :)

  • Arvind Bhardwaj

    Thanks,
    Worked perfect in WP 3.5.1

    • Travis

      Apologize for the comment, a tad late. This is the only article I could find that addresses this for the newer wp installs (3.6.1). All the other ones are about the misc folder. Anyways, followed the steps and it works, but the images are broken. I’m only working with a few images so it’s not a big deal to re-upload them.

      So i assume I need to create a new folder “media” (my path). Would that be going under uploads or to replace uploads? The url im looking for is http://mydomain/media/image.png. Can’t figure it out.

      Any help for anyone is much appreciated

      • http://www.wpbeginner.com/ WPBeginner Support

        you need to define the upload path in wp-config.php file like this:

        define( 'UPLOADS', ''.'media' );

  • K.Adam White

    Like many other commenters, I wanted a way to store my media uploads in the same directory as my WordPress install, e.g. to have WordPress in “mydomain.com/wp/” and to have my media in “mydomain.com/uploads/”. I’ve been able to get this working for me in WordPress 3.5 by adding the following to my theme’s functions.php (or to a plugin):

    if ( empty( $upload_path ) || ‘wp-content/uploads’ == $upload_path ) {
    update_option( ‘upload_path’, untrailingslashit( str_replace( ‘backend’, ‘files’, ABSPATH ) ) );
    update_option( ‘upload_url_path’, home_url( ‘/files’ ) );
    }

    Here’s hoping this gets easier in a future version of WordPress!

    • K.Adam White

      Update: In the above example, replace “backend” with “wp” (or wherever your WordPress is installed)

    • David Paul

      While this does seem to do the trick just by looking at it, why would you not just add 1 line to your wp-config file instead? Seems like a lot of extra work for the same payoff as this post presents…

      Adding define(‘UPLOADS’,’directory’); is so much easier.

  • nate

    I might be completely going about this the wrong way but I am using a multisite install to develop my clients sites… Since i use the code editor in wp-backend i like to use the image uploader as well to get images for css uploaded…

    Which i have created an awesome starter theme which i use widget content sidebar and uploaded images for certain areas like logo spot and even for background images – a “lazy” way of getting images to server..

    I wanted to use relative paths in my css in the case i moved site/theme or change domain names and didn’t want to use the normal wp-content/blog23/files path that is the default image uplaoder path…

    For 1 this lives outside my theme and and i’d like to simply use background: url (‘images/filename.png’) in my css with images i upload via wp-image uploader so that when my theme moves my links/images don’t break and then i plan to ” after site is ready to go live” change the uplaod path back to wp-content/blog23/files

    Just thinking this would make my life easier and of course i am probably overlooking something or being lazy but I promise i am not – I’m new to this… : )

    I changed the upload path inside the site settings but nothing changed? it still uploads to the the blogs files path?

  • Nico

    I am not able to get this (as copied from elsewhere in this thread) to work:

    define(‘UPLOADS’, ‘files’);

    It’s in my wp-config,php.

    I want my images in example.com/img

    Any help appreciated.

    Why oh why do they even bother to change things like this. It was SUCH a useful feature.

    • Nico

      Solved the problem. When I copied the code from this page, the quotes were of the “fancy” variety. When I made them plain, the code worked.

      Thanks for this.

  • Nico

    This is the kind of change that software developers make as they lose touch with their users.

    The explanation I read for removing this option is that few people used it, and it makes the UI cleaner. What nonsense.

  • Josef

    I want to the path of my files to be example.com/files

    Just to make the back-end more polish and hide the fact that I use WordPress.

    My question is, will I face any issues if I applied this method in the future? Next WordPress updates or moving the site to another host…etc?

    Is it dangerous?

    • http://www.wpbeginner.com Editorial Staff

      Anytime you decide to do things differently than its done in core, you are taking the responsibility and risks of future compatibility.

      • Josef

        I’m 100% get that.

        But I want answer for my question, I will be thankful.

        • http://www.wpbeginner.com Editorial Staff

          Your question was will you face any issues, and our response was answering that. We don’t know because so many things can change, but if you do face any issues, then you are responsible for that.

        • Dan A.

          @Josef

          Updates have never affected my sites using this method. If you change hosts, just make sure the directory you specified in your config file remains consistent with the directory holding the actual files and you won’t have any problems.

          I changed hosts one time & decided to rename my upload directory… After moving the images into the new directory I had broken links to all the images & files with the old directory name. It was a pain to go into the database and update the paths of the broken links.

          Just stay consistent.

  • James

    Hi there,

    Question, how can I customize upload directory per user?
    Is there an plugin available for that requirements?

    Thanks!

  • Papa Smurf

    Pro tip: you don’t need to prepend empty strings to strings. ;)

    define(‘UPLOADS’, ”.’files’);

    should be:

    define(‘UPLOADS’, ‘files’);

    WordPress source code is junky enough as it is….

  • Facu

    Thanks a lot! This was very helpful for me

  • Connie

    I noticed that after the upgrade to 3.5.1 the media uploader did not work at all. (Still does not work)

    also some plugins seem to use the conventional “wp-content/uploads” instead of constants or settings…

    that is really a problem, I cannot use the media uploader….

    • Connie

      I added the constant to the wp-config. the media-upload is uploading to the defined folder, but the media-input when editing a post, is not working at all, empty, no reaction when clicking…

      what a nerve…

      • Matteo

        maybe your server is windows, better a linux

    • http://www.wpbeginner.com Editorial Staff

      You will always run into issues with plugins when you do this. This option is not meant to be used by avg. users. When using it, you need to have a good enough reason to do so.

  • Mattia Frigeri

    Am I the only one who thinks that maybe the “upload” folder is fine, but the best organization shouldn’t be nor years or months, but the slug of the post/page in which the file is contained? Not the title, but the slug! This maybe could create problems with a single image used in 2 posts/pages, though. But I never use an image in 2 different places…

  • RVOLA

    Hello I wrote a small plugin for the new facilities WordPress 3.5.
    You can directly modify the domain or subdomain
    http://wordpress.org/extend/plugins/wp-original-media-path/

    • FragaGeddon

      Thanks you, that works well!

  • Chaitanya

    Please Help…
    I am okay with the default upload folder, but I am unable to upload any file in that folder without setting its permission to 777. But I feel it could be dangerous. Is there any way around?

    • http://www.wpbeginner.com Editorial Staff

      Talk with your server admin.

      • fred

        lol nice, you sound like MS tech support telling the admin to talk to their admin as a answer to the problem

        • http://www.wpbeginner.com Editorial Staff

          The user is afraid to change the permissions to 777. We have no control over their servers, and we don’t know if the user does either. So not sure how exactly you would like us to help.

  • Samarn

    In other way, You can use this url /wp-admin/options.php for change uploads directory path. Then find for upload_path is for you input path of your uploads directory. By default is wp-content/uploads. You can chage to wp-content/files for directory files under wp-content. Or you can chage to files for directory files in the same level path with wp-content.

    If you want to store media in sub domain. You must input url of your sub domain in upload_url_path and then point your sub domain to path of upload directory in above.

    After you change this. You must rename old directory name to new directory name or move all files and directories in old directory to new directory. If you don’t do that. Files not found.

    hope this useful and sorry for my english.

    • Chris

      Thanks, that was very very helpful.

    • Dave

      You *COULD* do this, it will work, but you are altering a core file. This has a big potential to break when updating WP. Better to alter the wp-config file as suggested here as it is NOT touched during an update.

  • A.K.

    Stupid changing! I have even changed the folder to something like /images/…

  • John

    I thought I was onto something here. I have a WP setup with 12 sites. It’s brand new. One of the sites is perfectly fine but the others we can not get the uploaded pictures/documents to show up. They are being referenced in a folder that does not exist. Rather than typing all of this here you can ready the thread at WordPress at http://wordpress.org/support/topic/pictures-do-not-display-3?replies=5. The thread has gone cold but I am in desperate need of help and any would be appreciated.

  • Henry

    Same as the above, i have tried to install 3.5 on a few new sites and what ever i do i can’t change to a sub domain. Again does any one know how to change the media upload to a sub domain?

  • Ed

    thanks for Posting. I think i am missing something though because I want to use your example to add images to a root directory, example: “http://mydomain/images”

    And based on your example what I am doing is enterring it as this:
    define ( ‘UPLOADS’, ‘http://mydomain/images’ ‘.’files’ );

    problem is, my media now shows the address as “http://otherdomain/http://mydomain/images” so basically the media is still staying on the current domain and not moving outside the domain to a root directory.

    hopefully I made sense there. Any advice?

    • Jaybe

      What you have done is not consistent with the example provided. The example provided sets the directory location/path only, not URI.

      You are including the scheme (http://) which is not appropriate, and furthermore, breaks things, when configuring the uploads directory/location.

      You, presumably, are additionally wanting to define the URI for uploads, as well.

      Others in the comments seem to be asking the same thing.

      — e.g. How do I upload and server uploads/media from a subdomain?

      Note there are two location specifications for uploads/media:

      1. Uploads directory/location.

      2. URI.

      The Uploads directory/location can be specified as a constant as follows:

      define( ‘UPLOADS’, ”.’files’ );

      That would provide for uploading and referencing files, via the default domain, as follows:

      (example) http://domain.tld/files

      This only sets the directory path/location, NOT the sub/domain.

      2. URI

      The URI is the full URL/path to get to/access uploads, prepended to the UPLOADS constant (#1 above).

      This, unfortunately, and oddly, is not available to define as a constant. However, it can be set via filter (wp_upload_dir), or by directly editing the database table entry.

      The database table entry location is as follows:

      Database/ wp_options/ upload_url_path

      * Note by editing upload_path and or upload_path_url in the database, you will re-enable the front-end UI for managing those fields going forward, as before, via the WordPress Admin/ Media/ Uploading Files section.

      For those wishing to host media via sub/other-domain, you might modify the upload_url_path similar to as follows:

      database/ wp_options/ upload_url_path:
      (example) http://mycdn.mydomain.tld

      Of course, you’ll need to configure your web server(s) to properly point the sub/domain to the corresponding location/directory to serve from.

      Hope this helps.

      • Julie Olson-Rachlin

        Jaybe — THANK. YOU.

        I never had any issues with this – until today.

        Peace!

  • Hamza

    and what if I want to put media in a subdomain ?

    • evan

      I have the same question

  • Eddy

    Thank you. Your tutorial is very helpful..

  • chrismccoy

    great post, the define isnt heavily documented, so its great someone is posting about it, i had a few clients who had their uploads in /pics and /images so this wasnt doable via 3.5 without the define for new installs.

  • Rhea

    Hi. Thanks for this. But I need the images saved outside of my wordpress site..

    ex:

    public_html/site /// this is my wordpress site
    public_html/media /// this is where i want to save all images instead.

    TIA

    • Pietro Gregorini

      I’d like to know the same thing, if is it possible to put the upload folder OUTSIDE wordpress root.

      • http://www.Bonxy.info/ Sam Ward

        You need to change the upload_url_path which was mentioned further up but it involves changing one of the wordpress core files.

        There is a nice plugin posted just a few posts up which will do it all for you.

        You can uninstall the plugin once you have made your changes to. :)

  • Saurabh

    and what if I want to put media in a subdomain ?

    • Carlos Varela

      You can define in your wp-config a media host

      define (‘MEDIA_HOST’, ‘http://media.yourdomain.com’);

  • Maarten

    I’m not really happy with this change because my WordPress uses a subdomain to serve the uploaded media. This still works after the upgrade, but it’s not available any more on new blogs..

    Without the two field to set the upload directory and path to download, I can only serve them from the same domain as WP, and not a cookieless domain as I want.

    • Jaybe

      One can still seth both path and URI via their respective database entries.

      It’s not as elegant as using a constant define but it’s just as easy and accessible for most that are considering mucking with such settings.