Laravel 10/9 storage:link example; Through this tutorial, i am going to show you how to link the storage folder and access file from there in laravel and download file from url to storage, upload image to storage.
Laravel 10/9 Link Storage Folder Example
Use the following command to link storage folder in laravel apps:
php artisan storage:link
If you face laravel storage link permission denied. So, this tutorial will help you to give permission for linking public storage directory in Laravel 10/9 app.
It turns out I was missing a view directories in laravel_root/storage/
. In order to fix this, all I had to do was:
cd {laravel_root}/storage
mkdir -pv framework/views app framework/sessions framework/cache
cd ..
chmod 777 -R storage
chown -R www-data:www-data storage
That creates a symlink from public/storage to storage/app/public for you and that’s all there is to it. Now any file in /storage/app/public can be accessed via a link like:
http://yourdomain.com/storage/image.jpg
If, for any reason, you cannot create symbolic links (maybe you are on shared hosting, etc.) or you want to keep certain files safe behind some access control logic, there is an option to have a special route One who reads and provides the image. For example a simple closure route like this:
Route::get('storage/{filename}', function ($filename) { $path = storage_path('public/' . $filename); if (!File::exists($path)) { abort(404); } $file = File::get($path); $type = File::mimeType($path); $response = Response::make($file, 200); $response->header("Content-Type", $type); return $response; });
Route::post('process', function (Request $request) { // cache the file $file = $request->file('photo'); // generate a new filename. getClientOriginalExtension() for the file extension $filename = 'profile-photo-' . time() . '.' . $file->getClientOriginalExtension(); // save to storage/app/photos as the new $filename $path = $file->storeAs('photos', $filename); dd($path); });
Now you can access your files the same way you do a symlink:
http://somedomain.com/storage/image.jpg
If you are using the Intervention Image Library, you can make things more successful by using its built-in response method:
Route::get('storage/{filename}', function ($filename) { return Image::make(storage_path('public/' . $filename))->response(); });
Be First to Comment