How do I upload a file to another folder that's outside of my project directory

April 24, 2017 855 views
Block Storage PHP Storage FAQ Ubuntu 16.04

So basically I recently setup a Block Storage volume in which I can upload static files to host for users.

My web app assets are currently sitting residing in /var/www/<project_name>/assets/img/user-images/, but I'd like to now upload all new assets to where I setup my Block Storage which is /mnt/assets/images/<all_files_comes_here.jpg>.

I can't seem to do this in PHP using the move_uploaded_files function.

Also, would I require any file permissions setup in order for me to upload files to my Block Storage folder?

Please advise.
Thank you.

3 comments
  • You need to make sure that your web user can write to /mnt/assets/images, if you use apache your web user is called www-data and you can change permission like this sudo chown www-data:www-data /mnt/assets/images.

  • I use nginx @Mohsen47 , but yes I have changed the permissions to www-data. My only concerns are whether PHP will recognise such directories with a child directory inside root /mnt/assets/images.

  • I recomend using rsync protocol on linux ubuntu.

1 Answer

Hi @jeimanjeya

You need to either change the mount point, create a symlink or change root path in Nginx.
But since you need PHP to be able to play nice, it might be possible to use the last option, since you code is going to be a different place than the images.
To change the mount point, you need to modify fstab.
To symlink: ln -s /mnt/assets/images /var/www/<project_name>/assets/img/user-images

  • Symlink is the best solution, you are right.

  • I see Ok. So if I were to use a symlink, and if by accident I delete my main project folder, will the reference to those assets still be in /mnt/assets/images ? @hansen

    • @jeimanjeya Well, that depends on how you delete - if you follow symlinks, it will delete the files in your block storage as well.
      Make sure you have backups - nothing else will protect you against accidents.

      • Gotcha, thanks @hansen . I managed to do it without symlinking/changing the mount. Just called it directly in PHP and it worked. I did change the permissions as per @Mohsen47 suggestion too.

Have another answer? Share your knowledge.