Reputation: 664
I want to create a video sharing site for a spacific niche (mini-youtube kind of thing).
I have created the upload functionality successfully, and files are stored in storage/public/videos
I then created a symlink using php artisan storage:link
When I try to access the files using echo asset('storage/videos/file.mp4');
as stated at https://laravel.com/docs/5.6/filesystem
my html in the view looks like
<video controls>
<source src="{{ asset('storage/videos/file.mp4') }}" type="video/mp4">
</video>
QUESTION : What am I doing wrong or missing?
Upvotes: 0
Views: 1940
Reputation: 19372
So from documentation:
The public disk is intended for files that are going to be publicly accessible. By default, the public disk uses the local driver and stores these files in storage/app/public. To make them accessible from the web, you should create a symbolic link from public/storage to storage/app/public. This convention will keep your publicly accessible files in one directory that can be easily shared across deployments when using zero down-time deployment systems like Envoyer.
as You understand when You do php artisan storage:link
it does following:
ln -s storage/app/public public/storage
but You're keeping Your files in storage/public/videos
that is not accessible (being linked) by documentation.
2 solutions:
1) You've to manually do (manually create symlinks):
ln -s storage/public/videos public/storage/videos
and in code to use it like: asset('storage/videos/file.mp4')
2) Change file storage methods to store files by convention: storage/app/public/videos
Upvotes: 3