14
votes

I've checked out the other posts about this, mine seems to be unique for some reason

Essentially what I'm trying to do is store uploaded photos in the public directory for easy access, however when I store them I'm trying to store them in a user specific folder, so

/public/photos/$User->id/$filename.jpg

Right now I have Dropzone uploading the file, and I've added to my filesystem.php this statement

'public_uploads' => [
  'driver' => 'local',
  'root'   => public_path(),
],

So in theory when I access that using

Storage::disk('public_uploads') 

it should retrieve the correct path

Here's my controller as well

$User = User::find(Auth::user()->id);
$Photo = Request::file('photo');
Storage::disk('public_uploads')->put("photos/$User->id", $Photo);

Then I get this error from Laravel on upload

{message: "Impossible to create the root directory "/censoredfilesystem/public/Photos/1".",…}

No idea where the period is coming from and any help is greatly appreciated

Thanks all!

  • Zach
3
Do you have permissions?Luis felipe De jesus Munoz
check all permissions if your're using LinuxMahdi Younesi
Permissions for what? I've set permissions correctly for App and Storage, do I need to set others?Zach Handley
You need to put braces around $User->id in Storage::disk('public_uploads')->put("photos/{$User->id}", $Photo);, as far as I know only variables work inside double quotes, but not object property calls. And you should also check that the process that runs php (apache or ngnix) has the permissions to write in the public folder.Sasa Blagojevic
Tried that, also added permissions for the public folder and neither worked, I think it's an error with the folder naming format rather than the permissionsZach Handley

3 Answers

18
votes

Fixed it unknowningly by setting permissions according to comments, I used

chown -R www-data:root .

in the root of my directory

Edit: I used www-data:root, meaning set the owner of everything inside the Laravel directory to www-data (the webserver) and root being root obviously. If you do this you should do it with a non-root user or just to www-data

-1
votes

First, remove these folders

/public/storage

/storage/app/public

Then run the following command

php artisan storage:link
-2
votes

In Centos and nginx:

sudo chown -R nginx:root public/duck/