How to set path download to my pc after uploaded file - laravel

How to set path download to my pc, When i upload pdf file and it's saved at storage\app\public\1\filename.pdf
(1 it's folder generate by queue after successfully upload)
<?php
return [
'default' => env('FILESYSTEM_DRIVER', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
],
],
'links' => [
public_path('storage') => storage_path('app/public'),
],
];

Related

Storage issue in web Laravel

I have the issue with storage/uploads/my-folder-name
Everything works perfect in local, but I get broken image icon on the web
I save my links to each image in DB as 'storage/uploads/my-folder-name/file.jpg'
But if I change this path to 'storage/app/public/uploads/my-folder-name/file.jpg' the image is shown correctly
I try to show the image in yajra datatable
I have deleted the storage folder from my public folder and created symbolic link again
So everything should be working but it is not
The filesystem:
'default' => env('FILESYSTEM_DISK', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'throw' => false,
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT',
false),
'throw' => false,
],
],
'links' => [
public_path('storage') => storage_path('app/public'),
],

Storage path is not part of public path Laravel

I wonder what is causing this error when I made a request to a Laravel project using Homestead.
This issue I think is related to storage link.
Storage path /home/vagrant/code/soso-api/storage/app is not part of
public path /home/vagrant/code/soso-api/public
Here's my filesystem.php
'disks' => [
'local' => [
'driver' => 'local',
'root' => public_path('app'),
],
'public' => [
'driver' => 'local',
'root' => public_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
],
in .env FILESYSTEM_DRIVER=public
I already tried
storage unlink
php artisan storage:link
php artisan cache:clear
php artisan config:cache
but to no avail. Let me know if I miss something.
UPDATE:
changed public_path to storage_path doesn't solve the issue.
Change:
'public' => [
'driver' => 'local',
'root' => public_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
To:
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL') . '/storage',
'visibility' => 'public',
],

Laravel Voyager: Repeating "App/Public" in image url on admin side

When I add a restaurant/upload an image using voyager. The image displays correctly on user side but doesn't show on admin side. when i inspect the url of the image it shows "app/public" is repeating twice.
If I update the restaurant info and let the image be the same. then it even stops working on the user side too. After inspecting the URL i got to know that the "app/public" keeps repeating the number of time i update the restaurant.
Images directory
public_html/tmo_api/storage/restaurants/July2021
**I've already tried symlinking again. and cache clear etc...
**
Voyager.php
/*'storage' => [
'disk' => env('FILESYSTEM_DRIVER', 'public'),
],*/
'storage' => [
'disk' => 'voyager',
],
filesystems.php
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage/app/public',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
'voyager' => [
'driver' => 'local',
'root' => storage_path('app/public'),// change here something specific to your application need
'url' => env('APP_URL').'/storage/app/public',
'visibility' => 'public',
],
],
app.php
'url' => env('APP_URL', 'http://example.com/tmo_api'),
'asset_url' => env('ASSET_URL', null),
.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:sdfswm8pJN6QQls+sdfRfsd56NQw8XBsdsdfdSW/saVPQ=
APP_DEBUG=true
APP_URL=http://example.com/tmo_api
You can see it repeating on ID-6

File not found at path in laravel 7x

I have an image at storage/public and I want access that with Storage library but i get error "File not found at path"
I search a lot in the internet and I don't get any solution for my problem so please help me.
my code :
$filename = '123.jpg';
$path = storage_path()."/".$filename;
Storage::disk('local')->get($path);
dd($contents);
the error :
Illuminate\Contracts\Filesystem\FileNotFoundException
C:\xampp\htdocs\admin\storage/123.jpg
the things i tried :
php artisan storage:link
the filesystem.php
<?php
return [
'default' => env('FILESYSTEM_DRIVER', 'local'),
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'permissions' => [
'file' => [
'public' => 0664,
'private' => 0600,
],
'dir' => [
'public' => 0775,
'private' => 0700,
],
]
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL') . '/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
],
'links' => [
public_path('storage') => storage_path('app/public'),
],
];
Your file is under storage/public folder but you trying to access it from storage folder.
Check your error path C:\xampp\htdocs\admin\storage/123.jpg
Change
$path = storage_path()."/".$filename;
to
$path = storage_path('public/' . $filename);

Override Laravel Voyager default Image Upload Path

The Voyager by default uploads the images to storage/app/public/posts folder for posts' featured images.
I want to change it to a custom folder in my public folder.
How do I achieve this?
Thanks in advance.
Open config/filesystems.php file and check this section. Add one more key like voyager for example.
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
],
'voyager' => [
'driver' => 'local',
'root' => storage_path('app/public'),// change here something specific to your application need
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
Then open config/voyager.php file and set that key ('voyager') instead of 'public' like this:
'storage' => [
'disk' => 'voyager',
],
Go to the config/filesystems.php and change the root and URL key for your new folder. See below the example
'public' => [
'driver' => 'local',
'root' => public_path().'/app', //Add new folder into public folder called app
'url' => env('APP_URL').'/public/app', //change get path for image
'visibility' => 'public',
],

Resources