2017-02-14 16 views
0

投稿要求に3つのファイルとその他の文字列を渡しています。しかし、私の検証が失敗する理由はわかりません。ここで大きなファイルがアップロードされたときにラーバル検証が失敗する

はフォーム

<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という応答を得ています。

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

あなたはPOSTリクエストを作るとき、あなたはそのフォームデータをエンコードする必要があります。私はこのようなフォーム要素でのenctypeを追加し、この答えはあなたの質問を解決する場合は知っているがいけない

+1

実際に検証エラーを印刷して、なぜ失敗したのか分かりませんか? '$ errors = $ val> errors(); dd($ errors-> all()); ' –

答えて

0

何らかの形で要求の本文enctypeについては、this question (and answer)を参照してください。

さらに、検証部に

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

を加えます。

+0

他のフィールドにデータが入っていますか? – nCrazed

+0

mp3ファイル用に「mimes:mpga」を試してください。 validateセクションにあります。このように 'ファイル' => '必須| mimes:mpga' –

+0

あなたは解決策を見つけましたか? –

関連する問題