【发布时间】:2019-03-19 07:28:20
【问题描述】:
我目前正在尝试在我的应用程序中验证收到的电子邮件并将电子邮件附件保存到我的数据库中。不过,我想控制哪些附件类型是允许的。
我在 PHP 中使用 Mail-Mime-Parser。
这是我的代码:
$attachments = collect($email->attachments())->map(function ($attachment) {
return [
'file' => $attachment-> getContentType()
];
})->validate(['file' => 'mimes:jpeg,jpg,bmp,png,gif,pdf']);
上面返回false,即使传入的附件确实是pdf file。这是我尝试过的方法:
$attachment->getContentType(),返回:
Collection {#521
#items: array:1 [
0 => array:1 [
"file" => "application/pdf"
]
]
}
我也尝试将PDF文件的实际内容返回给file,但验证仍然失败。
我也尝试过:
[...]->validate(['file' => 'mimetypes:application/pdf']);
但它仍然返回 false。
我做错了什么?如何即时成功验证附件 mime 文件类型?
供参考:
这是附件的实际标题内容,当我dd($email->attachments()):
-headers: array:5 [
0 => array:2 [
0 => "Content-Type"
1 => "application/pdf; name="Eksamenscase___BIGfinal.pdf""
]
1 => array:2 [
0 => "Content-Description"
1 => "Eksamenscase___BIGfinal.pdf"
]
2 => array:2 [
0 => "Content-Disposition"
1 => """
attachment; filename="Eksamenscase___BIGfinal.pdf";\r\n
\tsize=522462; creation-date="Sun, 03 Mar 2019 14:47:23 GMT";\r\n
\tmodification-date="Sun, 03 Mar 2019 14:47:23 GMT"
"""
]
3 => array:2 [
0 => "Content-ID"
1 => "<BEC725B483FD8944A5837620C72EF376@EURP193.PROD.OUTLOOK.COM>"
]
4 => array:2 [
0 => "Content-Transfer-Encoding"
1 => "base64"
]
]
【问题讨论】:
-
你在调用哪个
validate函数?因为 Laravel Collection 上没有。 -
对不起。我正在使用 Spaties 宏:github.com/spatie/laravel-collection-macros#validate
-
你认为底层 Laravel 验证器有可能猜测其他类似的 mime 类型而不是
application/pdf吗?