【问题标题】:Laravel uploaded file not appears in linked "public/storage" folderLaravel 上传的文件未出现在链接的“公共/存储”文件夹中
【发布时间】:2019-11-15 18:29:08
【问题描述】:

当我运行命令:php artisan storage:link 时,这将创建文件夹 /public/storage

然后我有处理上传文件的代码:

// get file original name and extension here, then generate file new name $fileNameToStore
// set file path
$path = $request->file('my_file')->storeAs('public/uploaded_imgs', $fileNameToStore);

代码有效并且上传的文件出现在/storage/app/public/uploaded_imgs/ 文件夹中,这很好,尽管/public/storage 文件夹中没有任何内容。

为什么/public/storage 目录下没有uploaded_imgs 文件夹?我做错了什么?

【问题讨论】:

  • 你有没有机会在虚拟机中运行它?
  • 你是如何创建 /public/storage 目录的?
  • @mikrafizik - Laravel 带有/public 文件夹,然后我运行php artisan storage:link,这会在/public 中创建storage 文件夹
  • @lagbox - 不,这不是虚拟机,(顺便说一句,我在 ubuntu 16.04)
  • 我认为这可能取决于您的文件浏览器和使用符号链接处理的方式 - 在某些情况下,我注意到结果只是缓存。

标签: php laravel laravel-5


【解决方案1】:

在 config/filesystems.php 中,您可以这样做...更改公共的根元素

注意:您可以使用文件夹名称代替上传

'disks' => [
   'public' => [
       'driver' => 'local',
       'root'   => public_path() . '/uploads',
       'url' => env('APP_URL').'/public',
       'visibility' => 'public',
    ]
]

您可以通过

访问它
Storage::disk('public')->put('uploaded_imgs', $request->file('my_file'));

'disks' => [
    'local' => [
        'driver' => 'local',
        'root'   => storage_path(),
    ],
    'uploads' => [
        'driver' => 'local',
        'root'   => public_path() . '/uploads',
    ],
]

那就用吧:

Storage::disk('uploads')->put('filename', $file_content);

【讨论】:

    【解决方案2】:

    试试这个:

    Storage::disk('public')->put('uploaded_imgs', $request->file('my_file'));
    
    

    希望它会起作用。

    【讨论】:

    • 假设public disk 的默认配置,他们将文件上传到public 磁盘覆盖的路径
    【解决方案3】:

    当你运行php artisan storage:link 命令时,Laravel 在“public”文件夹下生成一个“storage”符号链接,指向/storage/app/public,所以你的代码是正确的。

    没有public/storage 目录,它是一个指向/storage/app/public 的符号链接,这是您的uploaded_imgs 文件夹的生成位置。

    public/storage => /storage/app/public

    【讨论】:

      【解决方案4】:

      您可以使用以下代码上传文件:

      $file = $request->file('my_file');
      $fileNameWithoutExtension = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
      
      $path = "public/uploaded_imgs/" + $fileNameWithoutExtension +"."+$file->getClientOriginalExtension();
      
      Storage::disk('local')->put($path, file_get_contents($file), 'public');
      

      【讨论】:

      • 假设public disk 的默认配置,他们将文件上传到public 磁盘覆盖的路径
      猜你喜欢
      • 1970-01-01
      • 2021-11-02
      • 2021-09-08
      • 2020-01-21
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多