【问题标题】:Laravel file upload: validation disk spaceLaravel 文件上传:验证磁盘空间
【发布时间】:2019-12-27 14:22:43
【问题描述】:

我有一个文件上传验证,如果磁盘已满,我希望收到一条错误消息。

我的验证现在看起来像这样:

$validator = Validator::make($request->all(), [
    'file' => [
        'required',
        'file',
        'mimes:' . $mimes,
        'max:' . config('myapp.max-file-size-kb')
    ]
], $messages);

我可以为此使用max,但这会告诉用户文件太大。但这并不是真正的问题。

【问题讨论】:

  • 您是否正在为公司创建类似于 Google 驱动器的东西?

标签: php laravel validation file-upload


【解决方案1】:

好的,我认为应该可以:

$validator = Validator::make($request->all(), [
    'file' => [
        'required',
        'file',
        'mimes:' . $mimes,
        'max:' . config('myapp.max-file-size-kb'),
        static function ($attribute, $file, $fail) {
            $free_space = disk_free_space( Storage::disk('uploads')->path('/') );
            if ($file->getSize() > $free_space) {
                $fail('Not enough disk space: ' . $free_space . ' bytes left.');
            }
        },
    ]
], $messages);

【讨论】:

  • 我不确定这是否真的有效... PHP / Apache 可能会在某处缓存上传的数据,因此您可能需要使用双倍空格。如果上传路径在不同的卷上,它可能会起作用。但是你真的想告诉你的用户还剩下多少空间并让他们填满你的音量吗?会对您的用例感兴趣。也许您应该将上传大小限制在可用磁盘空间以下,并由运营团队设置监控以及早检测空间何时用完。或者存储在一些无限的 S3 存储桶中:)
  • 当然,这对于像 S3 这样的存储没有意义。就我而言,它是本地驱动器。上传的文件首先由 apache 存储在同一驱动器上,然后在验证后移动到位(如正常上传)。是的,有监控,但最终监控失败或观看它的人正在睡觉......所以我希望用户知道驱动器已满并且他无能为力。对于用户体验来说,了解问题是什么很重要,否则他会尝试 10 次仍然认为这是他的错 :D
猜你喜欢
  • 2014-06-30
  • 2015-10-07
  • 2017-02-12
  • 2023-03-03
  • 2020-11-29
  • 2016-02-25
  • 2016-02-20
  • 1970-01-01
  • 2020-07-12
相关资源
最近更新 更多