我如何使用 Lavavel 标准函数验证上传的文件名

how can i validate the uploaded file name using Lavavel standard functions

我不确定检查插入的恶意代码是否有用,但我还是想实现它。

我想用一些 Laravel 验证来检查文件名字符串,而不用 php 特定函数,如果可能的话。

这是我的代码片段:

$valiadateResult = Validator::make
        (
            $inReq->all(),
            [
                'atitle' => 'required',
                'keyw' => 'max:255|alpha_num',
                'gkeyw' => 'max:255|alpha_num',
                'up' => 'nullable|alpha_num|mimes:jpeg,jpg,png,gif,mp3,pdf|max:100000',
                'intro' => 'max:255',
                'full' => 'max:2000',
            ]
        );

所以up部分是文件验证,但它不检查文件名。 我试过了,但是 alpa_num 在这种情况下不起作用。

那么有没有使用某些 Laravel 函数的解决方案?或者我应该自己使用一些 PHP 逻辑来验证?或者您认为没有必要验证这样的输入?

此外,您还可以使用 "File" 验证。

验证字段必须是上传成功的文件。

'up' => 'file|nullable|alpha_num|mimes:jpeg,jpg,png,gif,mp3,pdf|max:100000',

您需要在输入和规则中添加另一个名为 filename 的文件。

$filename = $request->file('up')->getClientOriginalName();
$allInput = $inReq->all();
$allInput['filename'] = $filename;
$valiadateResult = Validator::make
        (
            $allInput,
            [
                'atitle' => 'required',
                'keyw' => 'max:255|alpha_num',
                'gkeyw' => 'max:255|alpha_num',
                'up' => 'nullable|alpha_num|mimes:jpeg,jpg,png,gif,mp3,pdf|max:100000',
                'filename' => 'alpha_num',
                'intro' => 'max:255',
                'full' => 'max:2000',
            ]
        );

你会得到文件名错误

  1. 创建自定义验证规则 class,例如 Filename,并将其放在路径 app/Rules/Filename.php.
<?php
namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Symfony\Component\HttpFoundation\File\UploadedFile;

class Filename implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param string $attribute
     * @param mixed $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (!($value instanceof UploadedFile) || !$value->isValid()) {
            return false;
        }

        return preg_match('/^[\pL\pM\pN]+$/u', $value->getClientOriginalName()) > 0;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute name is invalid.';
    }
}
  1. 在您的请求规则中添加如下自定义规则:
use App\Rules\Filename;

$valiadateResult = Validator::make(
    $inReq->all(),
    [
        'atitle' => 'required',
        'keyw' => 'max:255|alpha_num',
        'gkeyw' => 'max:255|alpha_num',
        'up' => ['nullable', new Filename, 'mimes:jpeg,jpg,png,gif,mp3,pdf', 'max:100000'],
        'intro' => 'max:255',
        'full' => 'max:2000',
    ]
);