Laravel Cannot Access Image Stored in Storage Folder after Uploading in Server
Solution 1
The href
will be correct, but that's not the issue. The issue is the presence of the file at the location of the link. It's not there, as you're finding.
When you upload, make sure you are not uploading a real directory at public/storage
.
On your local server, did you, by mistake, create a real directory at public/storage
?
If you did, you need to know that the laravel convention is to store your files in the storage/app/public
directory in your app directory.
You don't create the folder public/storage
yourself.
You create a symlink to link it to there instead. That way, stuff you put in storage/app/public
, also appears, because of the symlink, at public/storage
.
First check your local server follows the laravel convention outlined above (and in the docs), then, after uploading to your server, try the storage:link
command again, and, so long as you don't have a real directory at public/storage
anymore, but just a link, it should hopefully work.
Note what I've done here is interpret the error message you were getting about that directory already existing.
Also, check this answer if you are using Homestead. Instead of creating a storage link on the host computer, you should ssh into Vagrant and create a storage link here.
Solution 2
In case you have uploaded public/storage folder to server and getting error: The "public/storage" directory already exists.
just delete it with
rm -R public/storage
and run the command again
php artisan storage:link
Solution 3
If you are still stuck on this question, this is what worked for me:
In my case I had to change the APP_URL in .env file to the name of my site. It was defaulted to http://localhost. Once I change it everything worked perfectly.
Comments
-
Ahsan almost 2 years
I am trying to upload and retrieve image in my Laravel project. It worked perfectly in my local server, but after uploading in live server, its not working.
I am using nginx.
I have tried
php artisan storage:link
but it saysThe "public/storage" directory already exists
I am using this line to open the stored image in a new page.
<a href="{{ url('/storage/images/'.$file->file_name) }}" title="">View</a>
If I place mouse on the view button, it shows this link:
my_ip/storage/images/image.png
which I think is correct.However, clicking the link redirects to homepage.
-
Ahsan about 6 yearsI followed the Laravel doc and used
php artisan storage:link
command to create the symbolic link. and ran the command after uploading the app to server... any suggesion? -
mwal about 6 yearsTry to find out why the public/storage directory already exists.
-
Ahsan about 6 yearsIt was there in my local server. I uploaded it as it was. Should I delete and try the link command again?
-
Ahsan about 6 yearsI deleted the
public/storage
folder and runphp artisan storage:link
command again. I don't know why but its working. I guess I need to link public folder with storage each time I upload or install the app in a server. -
mwal about 6 yearsGlad you got it sorted. You could look into creating a composer post-install command if you like, which is a little hook to run after a composer install where you can run short commands like this, so you don't have to run them manually.
-
Mushfiqur Rahman over 5 yearsI just deleted the
public/storage
folder which I created mistakenly as you said. After deleting it run thephp artisan storage:lin
and it's working. Thanks @mwal