Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证Laravel中的xml mime类型_Laravel_Laravel 5 - Fatal编程技术网

验证Laravel中的xml mime类型

验证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类型的文件”

我设置了一个验证器来检查我们上传的文档是否是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()) {
    .....