Storage issue in web Laravel - 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'),
],

Related

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',
],

How to set path download to my pc after uploaded file

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'),
],
];

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

Reading image from storage_path on a shared host e.g Godaddy, returning error 404

I have a problem reading the url of the file saved to Storage/app/uploads/images/ on goDaddy shared host.
in .env, I configure the APP_URL = www.piggystore.com/server/storage
in a filesystem.php, after running php artisan storage:link
When I upload, the image is stored in Storage/app/uploads/images but to retrieve it is the problem.
I have configured public_path, by changing it in filesystem.php but it is not working as well. What am I getting wrong.
.env file
'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'),
],
],
];
Saving files in the path
$saveme = storage_path('app/uploads/images/'.$exportName);
$background->save($saveme);
$imag->image = $exportName;
$imag->textwrap = "dev";
$imag->imageOption = $option;
$imag->save();
if (empty($imag)){
return response()->json([
'success' => false,
'message' => 'There was a problem creating the postcard!'
], 201);
}
return response()->json([
'success' => true,
'data' => storage_path('app/uploads/images/'.$exportName),
'message' => 'Postcard created successfully!'
]);
}
All I want is to www.piggystore.com/uploads/images/filename.extension which will display in the browser
Thanks in advance

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