Php Laravel 5验证失败(未设置字段)
嗨,我现在正在为laravel 5的一个画廊编码,在那里你可以上传独立类别的图像和视频,我发现valdidation方法有一个非常奇怪的问题 图像上传本身工作正常,并且完全符合它的要求。 但是如果我尝试上传视频(mp4,webm),我的验证总是失败,错误是文件字段是必需的。但是,如果我尝试使用错误的mime类型文件执行相同的操作,所有操作都与预期的一样,并且验证方法会说它是错误的mime类型 该视图如下所示:Php Laravel 5验证失败(未设置字段),php,validation,file-upload,laravel-5.1,Php,Validation,File Upload,Laravel 5.1,嗨,我现在正在为laravel 5的一个画廊编码,在那里你可以上传独立类别的图像和视频,我发现valdidation方法有一个非常奇怪的问题 图像上传本身工作正常,并且完全符合它的要求。 但是如果我尝试上传视频(mp4,webm),我的验证总是失败,错误是文件字段是必需的。但是,如果我尝试使用错误的mime类型文件执行相同的操作,所有操作都与预期的一样,并且验证方法会说它是错误的mime类型 该视图如下所示: @extends('templates.base') @section('conten
@extends('templates.base')
@section('content')
@parent
{!! Form::open(['url' => '/gallery/upload/' .$gallery->id, 'files' => true]) !!}
<div>
{!! $error !!}
</div>
<table>
<tr>
<td>
Title:
</td>
<td>
{!! Form::text('title',old('title'),['class' => 'form_text', 'min' => '3', 'max' => '255']) !!}
</td>
</tr>
<tr>
<td>
Description:
</td>
<td>
{!! Form::textarea('description') !!}
</td>
</tr>
<tr>
<td>
File:
</td>
<td>
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
{!! Form::file('file') !!}
</td>
</tr>
<tr>
<td>
External:
</td>
<td>
<select name="external">
<option value="0" default>No</option>
<option value="1">Yes</option>}
</select>
</td>
</tr>
<tr>
<td>{!! Form::submit(trans('strings.create'),['class' => 'form_submit news']) !!}</td>
</tr>
</table>
{!! Form::close() !!}
@stop
返回
UploadedFile {#29 ▼
-test: false
-originalName: "big-buck-bunny_trailer.webm"
-mimeType: "application/octet-stream"
-size: 0
-error: 1
}
"v"
但是验证方法仍然说它失败了,因为文件字段是必需的
我只是觉得我忽略了什么。谢谢你的帮助
编辑:
我刚刚发现,当我上传一个图像文件时
UploadedFile {#29 ▼
-test: false
-originalName: "a8b5KQQ_460s_v1.jpg"
-mimeType: "image/jpeg"
-size: 53991
-error: 0
}
"v"
该错误为0,在webm文件上为1,但我不确定它的含义。从输出来看,该文件似乎为空,并且由于某种原因,无法找到mime类型。如果你深入研究 您将看到构造函数具有以下赋值:
$this->mimeType=$mimeType?:'application/octet stream'代码>
这似乎就是为什么要将应用程序/octet流
作为Mime类型
因为Laravelsrequest->file('file')
返回一个symfony\Httpfoundation\File\UploadedFile
的实例,该实例在构建对象时对文件执行一些检查-我猜检测到的任何错误都会导致Laravel假定没有上传任何文件,因此不会执行验证
无论哪种方式,该文件都不会进入您的服务器,这很好。顺便说一句,您应该能够调用$request->file('file')->getErrorMessage()
;它应该告诉您它认为问题出在哪里。从输出来看,文件似乎是空的,并且由于某种原因,找不到mime类型。如果你深入研究
您将看到构造函数具有以下赋值:
$this->mimeType=$mimeType?:'application/octet stream'代码>
这似乎就是为什么要将应用程序/octet流
作为Mime类型
因为Laravelsrequest->file('file')
返回一个symfony\Httpfoundation\File\UploadedFile
的实例,该实例在构建对象时对文件执行一些检查-我猜检测到的任何错误都会导致Laravel假定没有上传任何文件,因此不会执行验证
无论哪种方式,该文件都不会进入您的服务器,这很好。顺便说一句,您应该能够调用$request->file('file')->getErrorMessage()
;这应该告诉你它认为问题出在哪里。我实际上发现这与我试图上传的文件有关。我得到了一些其他的示例文件,当我试图上传它们时,这些文件没有问题。问题是为什么第一个webm是“application/octetstream”mime类型,因为它看起来像是一个普通的webm。第二个问题是为什么我没有因为错误的mime而失败,而不是因为文件未设置exeption。我实际上发现这与我试图上传的文件有关。我得到了一些其他的示例文件,当我试图上传它们时,这些文件没有问题。问题是为什么第一个webm是“application/octetstream”mime类型,因为它看起来像是一个普通的webm。第二个问题是为什么我没有因为错误的mime而失败,而不是因为文件未设置验证。非常感谢,这正是我想知道的。错误很简单<代码>“文件”big-buck-bunny\u trailer.webm“超出了upload\u max\u filesize ini指令(限制为2048 KiB)。“
我已经准备好了一个函数来检查ini中设置的最大文件大小,只是还没有实现它。你可以调用staticUploadedFile::getMaxFilesize()
方法,这可能会节省你的时间。对不起,我应该给你名称空间。UploadFile是symfony的一部分,但由于Laravel使用该类进行文件上载,如果它使您的生活更轻松的话,您也可以使用它。你可以在以下网址找到这门课的文档:非常感谢,这正是我想知道的。错误很简单<代码>“文件”big-buck-bunny\u trailer.webm“超出了upload\u max\u filesize ini指令(限制为2048 KiB)。“
我已经准备好了一个函数来检查ini中设置的最大文件大小,只是还没有实现它。你可以调用staticUploadedFile::getMaxFilesize()
方法,这可能会节省你的时间。对不起,我应该给你名称空间。UploadFile是symfony的一部分,但由于Laravel使用该类进行文件上载,如果它使您的生活更轻松的话,您也可以使用它。您可以在以下位置找到此特定类的文档:
UploadedFile {#29 ▼
-test: false
-originalName: "big-buck-bunny_trailer.webm"
-mimeType: "application/octet-stream"
-size: 0
-error: 1
}
"v"
UploadedFile {#29 ▼
-test: false
-originalName: "a8b5KQQ_460s_v1.jpg"
-mimeType: "image/jpeg"
-size: 53991
-error: 0
}
"v"