我创建了一个指定的位置来存储所有上传的图像在公共目录中,如下所示:
我有这样的公共驱动程序的默认 config/filesystem.php
:
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
在我的存储库中,我试图像这样保存上传的图像:
// ... snipped
if (array_key_exists('logo', $validated)) {
$logoPath = $validated['logo']->store(
'uploads/logos',
'public'
);
$company->logo = url($logoPath);
}
$company->save();
在数据库中,我可以看到公司记录的 logo
字段的值,如下所示: http://my-app.local/uploads/logos/3hlsAhnnIPjd4zhdpfhvKw4tqDkpcCz23NczwhVM.png
但是, public/uploads/logos
目录是空的 . 知道这里可能有什么问题吗?我应该在 UploadedFile
而不是 ->store()
上使用 ->move()
方法吗?
2 回答
您可以使用其他方法在公共目录中上载图像 .
实际上,是的,这是你的错,但不是你刚才找到的那个 . 默认情况下,laravel本地存储指向
storage/app/public
目录,因为laravel希望您采取专业行动并将所有上传的文件存储在存储中,而不是存储在某种公共目录中 . 但是你会问 - 地球上的用户应该如何直接访问非公共存储?并且有一个被捕获的php artisan storage:link
命令 . 它创建从公共目录到存储目录的符号链接(storage/app/public
- >public/storage
) . 这主要是因为部署和版本管理 .