上载大文件时,Laravel验证失败

时间:2017-02-14 19:47:04

标签: laravel validation

我在发送请求中向控制器传递了三个文件和几个其他字符串。但我不知道我的验证失败的原因。

这是表格

<form>
  <input type="radio"  name="inter_fit" id="inter_good_fit" value = "good" >
  <input type="radio" name="inter_fit" id="inter_bad_fit" value = "bad">
  <input id="report_upload" type="file"/>
  <input id="skype_upload" type="file"/>
  <input id="audio_upload" type="file"/>
  <input type="hidden" id="comp_candidate_id"/>
  <input type="hidden" id="comp_profile_id"/>
</form>

var candidate_id =  $('#comp_candidate_id').val();
var profile_id =  $('#comp_profile_id').val();
var inter_fit = $("input[name=inter_fit]:checked").val();
var report_file = $("#report_upload").prop('files');
var skype_file = $("#skype_upload").prop('files');
var audio_file = $("#audio_upload").prop('files');
var dataString = 'inter_fit='  +inter_fit+ '&report_file='  +report_file+ '&skype_file='  +skype_file+ '&audio_file='  +audio_file+ '&candidate_id=' +candidate_id+ '&profile_id=' +profile_id;
console.log(dataString);
var formData = new FormData();
formData.append("inter_fit",inter_fit);
formData.append("candidate_id",candidate_id);
formData.append("profile_id",profile_id);
var reportInput = $("#report_upload").get(0).files[0];

formData.append("report_file",reportInput);              

var skypeInput = $("#skype_upload").get(0).files[0];
formData.append("skype_file",skypeInput);              

var audioInput = $("#audio_upload").get(0).files[0];
formData.append("audio_file",audioInput); 

             $.ajax({

                    type: "POST",
                    url: "/complete_interview",
                    headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
                    data: formData,
                    cache: false,
                    contentType: false,
                    processData: false,
                    success: function(data) {
                        showStatus(data)

                    },
                    error : function(xhr ,status ,error)
                    {
                        console.log(xhr);
                        console.log(status);
                        console.log(error);

                    }
                });

                function showStatus(data)
                {
                    console.log(data);
                }

当上传文本文件等小文件时,不会出现问题并通过验证。上传大文件时,验证失败。这是我的控制器代码

public function completeInterview(Request $request){

        $val = \Validator::make($request->all(),
        ['inter_fit' => 'required',
        'report_file' => 'required',
        'skype_file' => 'required',
        'audio_file' => 'required', //not passed
        'candidate_id' => 'required',
        'profile_id' => 'required',
        ]);

        if ($val->fails()) {            
        return response()->json(['msg'=>"val_failed"]);
      }
      }

我更改了PHP文件上传和最大帖子大小配置。我不明白这里有什么问题。

我总是得到 val_failed 的回复。

2 个答案:

答案 0 :(得分:0)

我不知道这个答案是否会解决您的问题但是,在表单元素中添加 enctype ,如下所示:

<form role="form" method="post" enctype="multipart/form-data">

当您发出POST请求时,您必须以某种方式对构成请求正文的数据进行编码。有关enctype的更多信息,请参阅this question (and answer)

此外,添加

'audio_file' => 'required|mimes:mpga',

到验证部分。

答案 1 :(得分:0)

Form::open方法有'files' => true,表示表单数据将被编码为&#34; multipart / form-data&#34;因此,无论何时您要上传任何包含表单数据的文件,都需要它。

实施例: http://www.expertphp.in/article/laravel-53-upload-image-with-validation-example