PHPer
PHPer

Reputation: 664

Serve files from storage in Laravel (symlink custom storage path)

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

Answers (1)

num8er
num8er

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

Related Questions