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

时间:2017-04-13 10:50:47

标签: php laravel-5.4

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

我想用一些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逻辑来验证?或者你认为没有必要验证这样的输入?

3 个答案:

答案 0 :(得分:0)

此外,您可以使用"文件"验证

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

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

答案 1 :(得分:0)

您需要在输入和规则中添加另一个名为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',
            ]
        );

你会得到文件名错误

答案 2 :(得分:0)

  1. 创建自定义验证规则类,例如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',
    ]
);