【问题标题】:How to validate files in Laravel?如何在 Laravel 中验证文件?
【发布时间】:2020-11-05 12:51:14
【问题描述】:

似乎某些 ios 设备(我相信是较新的 iPhone 和 iPad)和版本无法正确验证文件。 我正在尝试验证一张图片、一份简历和 3 个视频。

我不断收到以下两个错误之一:

"resume_id": [
            "The resume id must be a file of type: doc, docx, pdf."
        ]

而且我总是上传 .doc 或 pdf 文件。

或者

"video_one_id": [
            "The video one id must be a file of type: avi ,mpeg, mpeg4, mov."
        ]
"video_two_id": [
            "The video two id must be a file of type: avi ,mpeg, mpeg4, mov."
        ]
"video_three_id": [
            "The video three id must be a file of type: avi ,mpeg, mpeg4, mov."
        ]

而且我总是上传 .mov 文件。我发现当我在 iPhone 上拍摄视频并上传时,通常会发生这种情况。我的客户也在他全新的 iPad 上尝试过同样的事情,但也没有成功。

这是我的代码。

CandidateProfileRequest.php:

public function rules()
{
    return [
        'date_of_birth' => 'required',
        'experience' => [
            'required',
            new MaxWordsRule(),
        ],
        'skills' => [
            'required',
            new MaxWordsRule(350),
        ],
        'job_title' => 'required',
        'resume_id' => 'required|file|mimes:doc,docx,pdf',
    ];

}

CandidateProfileController.php:

public function store(CandidateProfileRequest $request)
{
    if ($request->hasFile('video_one_id')
        && $request->hasFile('video_two_id')
        && $request->hasFile('video_three_id')
        && $request->hasFile('photo_id')) {
        $request->validate([
            'video_one_id' => 'file|mimes:avi ,mpeg, mpeg4, mov|max:30720',
            'video_two_id' => 'file|mimes:avi ,mpeg, mpeg4, mov|max:30720',
            'video_three_id' => 'file|mimes:avi ,mpeg, mpeg4, mov|max:30720',
            'photo_id' => 'image|mimes:jpeg, png, jpg|max:5120'
        ]);
    }
}

我还尝试在我的验证规则中使用 mimetypes 而不是 mime,但仍然出现上述错误。 在我的 Macbook Pro 笔记本电脑上一切正常,只在我的 iPhone 和我的客户 iPad 上运行。

我做错了什么?

【问题讨论】:

    标签: laravel file validation


    【解决方案1】:

    你可以这样验证文件

    $validator = Validator::make([ 'pdf'      => $request->file('pdf'), 'extension' => strtolower($request->file('pdf')->getClientOriginalExtension()),
            ], ['pdf'          => 'required', 'extension'      => 'required|in:pdf,html,txt', ], ['pdf.required'          => 'This field is required', 'extension.required'      => 'This field is required','extension.in'      => 'This field only accept pdf,html,txt extension',]);
    

    【讨论】:

    • 然后我必须对每种文件类型执行此操作? Laravel 绝对应该解决这个问题。似乎我们必须为一些愚蠢的事情编写额外的代码。不过谢谢你的回答!
    • 在这行代码中,.in 对 extension.in 做了什么? 'extension.in' => '该字段只接受pdf,html,txt扩展名'
    • 不幸的是,这对我不起作用,它在日志或控制台中没有显示错误。我的成功消息通过了,但数据没有...
    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2019-04-30
    • 2016-09-22
    • 2018-11-13
    • 2015-06-09
    相关资源
    最近更新 更多