验证Laravel中的xml mime类型
我设置了一个验证器来检查我们上传的文档是否是XML文件验证Laravel中的xml mime类型,laravel,laravel-5,Laravel,Laravel 5,我设置了一个验证器来检查我们上传的文档是否是XML文件 if($request->input('action')=='upload\u document'){ $validator=validator::make($request->all()[ 'file'=>'bail | required | mimes:application/xml,xml | max:10000', ] ); } 但是当我上传时,这个验证器会触发一个错误“文件必须是application/xml,xml类型的文件”
if($request->input('action')=='upload\u document'){
$validator=validator::make($request->all()[
'file'=>'bail | required | mimes:application/xml,xml | max:10000',
]
);
}
但是当我上传时,这个验证器会触发一个错误“文件必须是application/xml,xml类型的文件”,即使我删除了一个扩展名为.xml的真正的xml文件
我的php.ini config extension=php_fileinfo.dll中当然有注意mime类型验证指示Laravel读取文件内容以确定其类型,因此将图像扩展名从
.jpg
更改为.xml
不会欺骗它
从
模仿:foo,bar,…
验证中的文件必须具有与列出的扩展名之一对应的MIME类型
MIME规则的基本用法
'photo'=>'mimes:jpeg、bmp、png'
尽管您只需要指定扩展名,但此规则实际上通过读取文件内容并猜测其MIME类型来验证文件的MIME类型
MIME类型及其相应扩展的完整列表可在以下位置找到:
因此,请确保您的文件是来自Laravel项目的实际有效的xml文件(使用phpunit.xml试试)
Route::post('/',函数(Request$Request){
如果($request->input('action')=='upload\u document'){
$validator=validator::make(
$request->all(),
[
'file'=>'bail | required | mimes:application/xml,xml | max:10000',
]
);
$validator->validate();
dd(“文件有效”);
}
});
还有像这样的表格
@csrf
提交
@错误('文件')
{{$message}}
@恩德罗
结果:
"the file is valid"
但是当使用image.xml进行测试时
The file must be a file of type: application/xml, xml.
或者,您可以通过扩展进行验证
Route::post('/',函数(Request$Request){
如果($request->input('action')=='upload\u document'){
$request->validate([
“文件”=>[
“保释”,
“必需”,
“最大值:10000”,
函数($attribute,$value,$fail){
如果($value->getClientMimeType()!='text/xml'){
$fail($attribute.\'的扩展名无效。“);
}
},
]
]);
dd(“文件有效”);
}
});
现在,扩展名为xml
的图像文件通过了验证
请参见外部公司提供的XML似乎不符合适当的XML标准
由于它不在我的手中,我不会重新格式化它,我将不得不将它作为文本进行管理。所以我想我不能在我的情况下使用验证器。对于那些试图在Laravel5上传递xml扩展的人(比如我)。
这也适用于其他附加扩展
由于Laravel ExtensionGuesser允许通过方法寄存器添加自定义猜测器,因此我们执行以下操作
使用自己的扩展数组创建新类。我把它改成了原来的,所以它与界面相对应。我已经把它放在助手文件夹里了
所以现在guesser在Previor*类中检查我们的数组,然后转到原始数组。猜测Web服务器设置为text/xml
,这是现在xml
最常见的mime类型设置。我尝试过了,但遗憾的是在这篇长文章中没有使用text/xml tooThanks,但是,第一个解决方案触发的错误与我使用validator的方式相同,包括您试图在问题中验证的XML文件,第二个扩展解决方案不提供任何validator对象,validate of request只提供一个数组,其中包含一个文件,但我不知道这是否意味着验证器正常,我没有这个验证回调的任何状态。该文件的mime类型是“text/xml”,它在我的机器上通过了验证,问题不在代码中
<?php
namespace App\Helpers;
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeExtensionGuesser;
/**
* Provides a best-guess mapping of mime type to file extension.
*/
class PriorExtensionGuesser extends MimeTypeExtensionGuesser
{
/**
* Addition to pretty old map of mime types and their default extensions.
*
* @see http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
*/
protected $defaultExtensions = array(
'text/xml' => 'xml',
);
}
use Symfony\Component\HttpFoundation\File\MimeType\ExtensionGuesser;
public function store (Request $request) {
if ($request->hasFile('file')) {
$guesser = ExtensionGuesser::getInstance(); //take the guesser who will guess
$guesser->register(new \App\Helpers\PriorExtensionGuesser()); //add own guesser
$validator = Validator::make($request->all(), [
'file' => 'file|mimes:txt,xls,xlsx,csv,xml|max:32768',
]);
if ($validator->fails()) {
.....