Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
Php Laravel 5验证失败(未设置字段)_Php_Validation_File Upload_Laravel 5.1 - Fatal编程技术网

Php Laravel 5验证失败(未设置字段)

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

嗨,我现在正在为laravel 5的一个画廊编码,在那里你可以上传独立类别的图像和视频,我发现valdidation方法有一个非常奇怪的问题

图像上传本身工作正常,并且完全符合它的要求。 但是如果我尝试上传视频(mp4,webm),我的验证总是失败,错误是文件字段是必需的。但是,如果我尝试使用错误的mime类型文件执行相同的操作,所有操作都与预期的一样,并且验证方法会说它是错误的mime类型

该视图如下所示:

@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类型

因为Laravels
request->file('file')
返回一个
symfony\Httpfoundation\File\UploadedFile
的实例,该实例在构建对象时对文件执行一些检查-我猜检测到的任何错误都会导致Laravel假定没有上传任何文件,因此不会执行验证


无论哪种方式,该文件都不会进入您的服务器,这很好。顺便说一句,您应该能够调用
$request->file('file')->getErrorMessage()
;它应该告诉您它认为问题出在哪里。

从输出来看,文件似乎是空的,并且由于某种原因,找不到mime类型。如果你深入研究 您将看到构造函数具有以下赋值:

$this->mimeType=$mimeType?:'application/octet stream'

这似乎就是为什么要将
应用程序/octet流
作为Mime类型

因为Laravels
request->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中设置的最大文件大小,只是还没有实现它。你可以调用static
UploadedFile::getMaxFilesize()
方法,这可能会节省你的时间。对不起,我应该给你名称空间。UploadFile是symfony的一部分,但由于Laravel使用该类进行文件上载,如果它使您的生活更轻松的话,您也可以使用它。你可以在以下网址找到这门课的文档:非常感谢,这正是我想知道的。错误很简单<代码>“文件”big-buck-bunny\u trailer.webm“超出了upload\u max\u filesize ini指令(限制为2048 KiB)。“
我已经准备好了一个函数来检查ini中设置的最大文件大小,只是还没有实现它。你可以调用static
UploadedFile::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"