Reputation: 21
i just hosted my Laravel app, and when i try to store any file the path is copied to the database but the file itself fail to upload, i tried changing permissions but nothing changed. i already had some images on the storage folder and they are displaying just fine.
the storage link
is already created.
Controller
public function addLeague(Request $request) {
$newLeague = new League();
$newLeague->name = $request->input('name');
if ($request->hasFile('logo')) {
$newLeague->logo = $request->logo->store('images');
}
$newLeague->save();
return redirect('/leagues');
}
Filesystems
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application. Just store away!
|
*/
'default' => env('FILESYSTEM_DRIVER', 'local'),
/*
|--------------------------------------------------------------------------
| Default Cloud Filesystem Disk
|--------------------------------------------------------------------------
|
| Many applications store files both locally and in the cloud. For this
| reason, you may specify a default "cloud" driver here. This driver
| will be bound as the Cloud disk implementation in the container.
|
*/
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
| Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options.
|
| Supported Drivers: "local", "ftp", "s3", "rackspace"
|
*/
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app/public'),
],
'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'),
],
],
];
Upvotes: 0
Views: 6232
Reputation: 17
I think the symlink owner/group is "root/root" and the user who visits a website is other (in Plesk, the group of the user who visits the web is "psacli", for example). This user hasn't permissions to execute the symlink owned by root. You have to change the owner/group of the symlink to the user/group of the web users.
Upvotes: 1
Reputation: 161
I had the same issue, after a lot of debugging i managed to identify the actual problem that caused 403 error.
Solution is simple, in
Config/Filesystem.php where you define your public_path and storage path, you must have same/identical public_path name and storage_path end directory name.
Example:
- Incorrect:
public_path('brands') => storage_path('storage/app/public/brandimages');
This will generate 403 error, "since public_path('brands')" is not same as "storage_path('../../../brandsimage')".
- Correct:
public_path('brands') => storage_path('storage/app/public/brands');
Now the public_path('brands') and "storage_path('../../../brands')" are same, therefore, correct symlinks will generated,thus solving 403 error.
Generate symlinks with following artisan command
php artisan storage:link
For relative links, use following command
php artisan storage:link --relative
Upvotes: 1
Reputation: 5442
Probably you have a broken symbolic link. To check this, access to the public folder and type ls
to view the storage link. If it's in red, you have to fix it:
Find where link pointed to: readlink -v storage
Point link to new path: ln -sfn /path/to/your/storage/public/ storage
Reference: REPAIRING BROKEN SYMBOLIC LINK
Upvotes: 1