【问题标题】:Saving uploaded image file in public dir not working in laravel 5.6在公共目录中保存上传的图像文件在 laravel 5.6 中不起作用
【发布时间】:2018-10-02 08:01:02
【问题描述】:

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

我有默认的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 上使用->move() 方法而不是->store()

【问题讨论】:

  • 它可能在storage 文件夹中(storage/app/public 可能)?
  • 啊!你是对的'root' => storage_path('app/public'), 我想我需要更新这条路径。让我检查一下。
  • 是的,我已经有一分钟没有处理文件上传了。但是storage_path() helper 会生成存储文件夹的路径。您可能只想将其更改为 public_path('uploads') 之类的内容。或者创建一个从存储文件夹到公共文件夹的符号链接
  • 是的,这就是问题所在,我没有对文件系统定义给予足够的重视。愚蠢的错误。

标签: php laravel laravel-5 image-uploading


【解决方案1】:

您可以使用其他方法在公共目录中上传图片。

$request->validate([
    'logo' => 'image|required',
]);

if($request->hasFile('logo')){
   $company->logo = $request->image->move('uploads/logo', $request->logo->hashName());
}
$company->save()

【讨论】:

    【解决方案2】:

    实际上,是的,这是您的错误,但不是您刚刚发现的错误。默认情况下,laravel 本地存储指向storage/app/public 目录,因为 laravel 希望你专业地行事并将所有上传的文件存储在存储中,而不是某种公共目录中。但是你会问 - 究竟用户应该如何直接访问非公共存储?并且有一个被捕获的 -php artisan storage:link 命令。它创建从公共目录到存储目录的符号链接 (storage/app/public -> public/storage)。这主要是因为部署和版本管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2015-10-17
      • 2020-08-17
      • 1970-01-01
      • 2014-03-18
      • 2017-07-22
      • 2020-10-03
      相关资源
      最近更新 更多