【问题标题】:Laravel 5.1 Validation failing on correct mime/extensionLaravel 5.1 验证在正确的 mime/扩展上失败
【发布时间】:2016-04-30 10:30:44
【问题描述】:

我使用请求类进行验证。我有一个请求类,里面有这段代码:

public function rules()
{
    $rules = [
        'attachment'  => 'mimes:png,jpg,gif'
    ];
}

在我的控制器中执行$request->file('attachment')->getClientMimeType() 会返回image/png

然而,每当我尝试发送 png 文件时,我仍然收到验证错误:“附件必须是以下类型的文件:png、jpg、gif。”

我正在使用名为 Paw 的 REST 客户端通过 Multipart form 将文件发送到后端

我错过了一步吗?

编辑:我不能使用 image 作为验证规则,因为我最终想开始接受 pdf/doc 和其他格式(image 顺便说一句失败)。到目前为止,PDF 和 doc 均未通过验证。

【问题讨论】:

  • 请张贴表单html部分
  • 我正在使用名为 Paw 的 REST 客户端将请求发送到后端。我会相应地更新问题
  • 您是否尝试过使用image 规则?
  • @user2094178 不,我没有。我最终也想开始接受 pdf 和 doc 文件,但这些文件也失败了
  • 你说image 失败了,这让我相信上传没有按预期工作——也许是爪子缺陷?您是否尝试过使用其他客户端,甚至浏览器?

标签: php validation laravel-5 laravel-5.1


【解决方案1】:

根据W3Schools,上传文件时必须提到multipart/form-data,这样就不会编码任何字符,这可能会导致验证失败。

【讨论】:

  • 我的Content-Type 标头设置为multipart/form-data
  • 您可以从您的浏览器网络选项卡中发布请求标头吗? (只需复制所有标题以确保没有出错)
  • @Xecure 还确保文件实际上是 png 类型?
  • 我没有使用 chrome,而是使用名为 Paw 的 REST 客户端来发出这些请求。根据本发明的卷曲输出爪给出了这些是我的头:-H“曲奇:laravel_session = eyJpdiI6ImNTNTFyeVV6V3NlNGRNVDNiY25Pd3c9PSIsInZhbHVlIjoiMEFCSkFkVU9oRWV3c21SVW5BWjlobUQxZWRGNEIzYzNHYnJhd1ozMnRcL2FqSmxMZ3BmTWsxd2pRVGpxVFJQSEg5Wng1UkZ4UFZLVVRjUmtcL2FWWE1Bdz09IiwibWFjIjoiYmY3YTU1NzUyZDk2NDFiMmY1ZjQ2ZDY5Yjc2MmQ0NzBjNmRjZWJkNjBhMGE2N2E3NzkxZGFmMDVlMTk4NTA5MiJ9” \ -H“内容类型:多部分/格式数据;边界= A3K5XyonG4KqTbFpCmlAhtVd3S8FBB5R” \ 跨度>
  • 根据 www.mime.ritey.com 并在我的控制器中调用 $request->file('attachment')->getClientMimeType(),我尝试上传的文件的 mime 类型为`image/png`
【解决方案2】:

我知道这个帖子很旧,但这可能会帮助其他可能偶然发现同样问题的人。顺便说一下,我使用“附件 []”作为输入名称。我使用它来工作:

$this->validate(request(), [
        'attachments.*' => 'required|mimes:jpeg,png,pdf'
]);

使用 dot(.) 星号解决了我的问题。

【讨论】:

  • 这个验证规则没有影响,它只会接受任何东西。
  • 您能详细说明原因吗? @minhazur
  • 我不确定,但这条规则接受一切,可能是因为 .* @user
  • 哦,我明白你的意思了,但我的回答清楚地表明我使用attachment[index] 作为我的输入名称。因此 attachment.* 表示“附件”输入名称的所有索引。 Laravel 文档确实提到我们可以使用这种验证 [laravel.com/docs/5.5/validation#validating-arrays]
【解决方案3】:

我也遇到了这个问题,但对我没有任何帮助。导致代码在本地运行良好,在我的 ubuntu 服务器上运行失败。对我有用的是删除 laravel 验证并使用普通的 php 验证。有时简单才是最有效的。enter image description here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多