【问题标题】:How to validate $_FILES using Respect Validation library如何使用尊重验证库验证 $_FILES
【发布时间】:2017-01-23 10:00:13
【问题描述】:

我正在使用Respect Validation 来尝试验证文件上传。我遇到的问题是验证总是失败,即使已经上传了正确的图像。

这是我的代码:

public function updateProfilePicture(Request $request, Response $response, $args = []) {

    $files = $request->getUploadedFiles();

    if(empty($files['image'])) {
        throw new AppException('Invalid image');
    }

    // Validate image
    $validator = v::key('image', v::image());

    try {
        $validator->assert($files);
        // $validator->assert($_FILES);
    } catch(NestedValidationException $e) {
        throw new AppException($e->getMessage());
    }
}

我得到的错误是:

{
  "status": false,
  "data": null,
  "message": "All of the required rules must pass for { \"image\": { \"name\": \"twitter.png\", \"type\": \"image/png\", \"tmp_name\": \"/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/php7x3P6w\", \"error\": 0, \"size\": 210955 } }"
}

按照 cmets 中的建议,我尝试使用 $validator->assert($files['image']);。这不起作用并产生以下错误:

{
  "status": false,
  "data": null,
  "message": "All of the required rules must pass for `[object] (Slim\\Http\\UploadedFile: { \"file\": \"/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/phppJn1Uw\" })`"
}

$files 变量包含:

array(1) {
  ["image"]=>
  object(Slim\Http\UploadedFile)#120 (8) {
    ["file"]=>
    string(66) "/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/php8sPpkD"
    ["name":protected]=>
    string(11) "twitter.png"
    ["type":protected]=>
    string(9) "image/png"
    ["size":protected]=>
    int(210955)
    ["error":protected]=>
    int(0)
    ["sapi":protected]=>
    bool(true)
    ["stream":protected]=>
    NULL
    ["moved":protected]=>
    bool(false)
  }
}

$_FILES 包含:

array(1) {
  ["image"]=>
  array(5) {
    ["name"]=>
    string(11) "twitter.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(66) "/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/phpm0Gv35"
    ["error"]=>
    int(0)
    ["size"]=>
    int(210955)
  }
}

按照评论中的建议,我尝试了$validator->assert($_FILES['image']['tmp_name']); 并收到以下错误:

{
  "status": false,
  "data": null,
  "message": "All of the required rules must pass for \"/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/php8E5apg\""
}

我尝试在 Google 上查看其他人的做法,但找不到任何有用的信息。

【问题讨论】:

  • 你试过了吗? $validator->assert($files['image']);
  • @LucasdeOliveira 尝试过,但无济于事。我已更新我的答案以显示错误。
  • 这个变量$files返回什么?如果和$_FILES返回的一样,可以尝试这样做:$validator->assert($files['image']['tmp_name']);
  • @deoliveiralucas 也尝试过。我已经更新了问题。
  • 这会返回什么var_dump((new finfo(FILEINFO_MIME_TYPE))->file($files['image']));

标签: php validation respect-validation


【解决方案1】:

尝试这样做:

var_dump(v::image()->validate($_FILES['image']['tmp_name‌​']‌​));

【讨论】:

    猜你喜欢
    • 2017-03-23
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多