将上传的图像文件保存在公共目录中不在laravel 5.6中工作

时间:2018-04-22 00:18:32

标签: php laravel laravel-5 image-uploading

我已经创建了一个指定位置,可以将所有上传的图像存储在公共目录中,如下所示:

enter image description here

我有公共驱动程序的默认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()吗?

2 个答案:

答案 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)的符号链接。这主要是因为部署和版本管理。