如何从 Laravel 存储子文件夹中检索文件?
How to retrieve file from Laravel storage subfolder?
我正在尝试从 laravel 项目中的此路径检索文件:
/storage/app/public/blog/3.jpg
这些方法会产生以下错误:
1.
$image = Storage::disk('public')->get('/storage/blog/3.jpg');
->
local.ERROR: File not found at path: storage/blog/3.jpg {"userId":16,"exception":"[object] (Illuminate\Contracts\Filesystem\FileNotFoundException(code: 0): File not found at path: storage/blog/3.jpg at /Users/artur/PhpstormProjects/safa-ameedee.com/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php:171)
[stacktrace]
$image = Storage::disk('public')->get('/storage/app/public/blog/3.jpg');
$image = Storage::get('/storage/app/public/blog/3.jpg');
->
local.ERROR: File not found at path: storage/app/public/blog/3.jpg {"userId":16,"exception":"[object]
奇怪的是我将文件存储在存储中是这样的:
Storage::disk('public')->put('/blog/' . $request->path, $image);
那么它们不应该以相同的方式检索吗?
TL/DR
Storage::disk('public')->get('block/3.jpg');
说明
问题是您出于某种原因将 storage
放在路径中。这不是必需的,并且会导致构建错误的路径。
查看默认文件系统配置:
'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,
],
root
是有用的,看这里。 storage_path()
returns 存储文件夹的完整路径。所以像 storage_path('folder_1')
-> /home/user/project/storage/folder_1
.
local
磁盘是默认的,所以只要Storage::get()
就会自动使用它。
您正在使用 public
磁盘,因此这些文件的实际位置是 storage/public
(符号链接到 public/storage
)。这意味着 Storage::disk('public')
已经从 /home/user/project/storage/app/public
开始了。再次添加storage
导致路径不正确。
使用path
可能有助于将来的调试。 Storage::disk('public')->path('block/3.jpg')会输出完整的路径,大家可以看看哪里出错了。对于给定的代码,它可能会显示类似 /home/user/project/storage/app/public/storage/app/public
.
的内容
我正在尝试从 laravel 项目中的此路径检索文件:
/storage/app/public/blog/3.jpg
这些方法会产生以下错误:
1.
$image = Storage::disk('public')->get('/storage/blog/3.jpg');
->
local.ERROR: File not found at path: storage/blog/3.jpg {"userId":16,"exception":"[object] (Illuminate\Contracts\Filesystem\FileNotFoundException(code: 0): File not found at path: storage/blog/3.jpg at /Users/artur/PhpstormProjects/safa-ameedee.com/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php:171)
[stacktrace]
$image = Storage::disk('public')->get('/storage/app/public/blog/3.jpg');
$image = Storage::get('/storage/app/public/blog/3.jpg');
->
local.ERROR: File not found at path: storage/app/public/blog/3.jpg {"userId":16,"exception":"[object]
奇怪的是我将文件存储在存储中是这样的:
Storage::disk('public')->put('/blog/' . $request->path, $image);
那么它们不应该以相同的方式检索吗?
TL/DR
Storage::disk('public')->get('block/3.jpg');
说明
问题是您出于某种原因将 storage
放在路径中。这不是必需的,并且会导致构建错误的路径。
查看默认文件系统配置:
'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,
],
root
是有用的,看这里。 storage_path()
returns 存储文件夹的完整路径。所以像 storage_path('folder_1')
-> /home/user/project/storage/folder_1
.
local
磁盘是默认的,所以只要Storage::get()
就会自动使用它。
您正在使用 public
磁盘,因此这些文件的实际位置是 storage/public
(符号链接到 public/storage
)。这意味着 Storage::disk('public')
已经从 /home/user/project/storage/app/public
开始了。再次添加storage
导致路径不正确。
使用path
可能有助于将来的调试。 Storage::disk('public')->path('block/3.jpg')会输出完整的路径,大家可以看看哪里出错了。对于给定的代码,它可能会显示类似 /home/user/project/storage/app/public/storage/app/public
.