我已经创建了一个指定位置,可以将所有上传的图像存储在公共目录中,如下所示:
我有公共驱动程序的默认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
目录是空的。知道这里可能有什么问题吗?我应该在->move()
上使用UploadedFile
方法而不是->store()
吗?
答案 0 :(得分:1)
您可以使用其他方法在公共目录中上传图片。
$request->validate([
'logo' => 'image|required',
]);
if($request->hasFile('logo')){
$company->logo = $request->image->move('uploads/logo', $request->logo->hashName());
}
$company->save()
答案 1 :(得分:0)
实际上,是的,这是你的错,但不是你刚发现的那个。默认情况下,laravel本地存储指向storage/app/public
目录,因为laravel希望您采取专业行动并将所有上载的文件存储在存储中,而不是存储在某种公共目录中。但是你会问 - 地球上的用户应该如何直接访问非公共存储?并且有一个catch - php artisan storage:link
命令。它创建从公共目录到存储目录(storage/app/public
- > public/storage
)的符号链接。这主要是因为部署和版本管理。