【问题标题】:Laravel Storage::get unable to access after symbolic link createdLaravel Storage::get 符号链接创建后无法访问
【发布时间】:2018-05-24 11:25:13
【问题描述】:

以下在 5.5 中正确上传/移动文件——能够从目录查看/访问——但 Storage::get 不返回文件路径,即使创建了符号链接,直接访问文件也会给出 404。

$currentuser_id = Auth::user()->id;
$file = request()->file('resume');
$fileName = $file->getClientOriginalName();
Storage::disk('uploads')->put($currentuser_id.'/'.$fileName, file_get_contents($file));

试图访问文件,$content 最终为空:

$content = Storage::disk('uploads')->get($currentuser_id.'/filename.pdf');

直接访问文件会产生404:

https://www.website.com/storage/uploads/1/filename.pdf

文件系统配置:

'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

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

],

【问题讨论】:

  • 您可以将该磁盘的配置数组添加到帖子中吗?
  • @lagbox 确定——添加了完整配置

标签: php laravel hyperlink upload laravel-5.5


【解决方案1】:

您可以使用UploadedFile提供的处理存储磁盘的方法稍微简化代码。

$file = request()->file('resume');
$file->storeAs(Auth::id(), $file->getClientOriginalName(), 'uploads');

Laravel 5.5 Docs - Requests - Storing Uploaded Files

storage/app/public 可能已链接,但 storage/uploads 未链接到公用文件夹中,因此没有可访问的地址来获取文件。

【讨论】:

  • 在创建符号链接后,php artisan storage:link 不允许我访问存储中的所有子文件夹吗?
  • 是的,你是对的。我必须将/storage/uploads 专门链接到公共,而不仅仅是我最初所做的/storage。那成功了。谢谢!
  • 您没有链接storage,该命令没有链接storage,它链接storage/app/public,这是public磁盘默认指向的内容
猜你喜欢
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 2017-02-05
相关资源
最近更新 更多