On a Drupal 7 installation I have an image gallery (set up with the media gallery module). I set the upload destination to private to protect those images for anonymous users. Unfortunately it turned out, that the performance of private images is that poor, that the gallery became quit unusable.

So I decided to switch the destination to public for the node type. But as there already exist nodes of the mentioned type (I assume that my be the reason), the options of the node type's filed, where to set the destination is greyed out:

enter image description here

Is there any way to change the destination for existing nodes?

1 Answer 1


You could accomplish this by moving the files out of the private directory and into the public directory (make sure the paths stay the same!). Then you would need to update the 'file_managed' table. The 'uri' table will list the files as either private or public. The mySQL would be similar to:

UPDATE file_managed SET uri = REPLACE(uri, 'private://', 'public://') where instr(uri, 'private') > 0;

NOTE Please make sure to test this on a dev site before doing in production.

  • 1
    I'd rather make that REPLACE(uri, 'private://', 'public://'), having 'private' or 'public' elsewhere in a filename seems like it could happen often
    – Clive
    Commented Sep 5, 2014 at 19:27
  • 1
    Clive. Good call. I've updated my answer with your suggestion.
    – nmillin
    Commented Sep 15, 2014 at 14:25
  • @Clive, I know this is an old post. Your script works on Drupal 9.4. Can it be modified to only effect a certain filemime like image/jpg and or image/jpeg? I don't want to change pdfs,word docs. Commented Jan 10, 2023 at 18:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.