我在发送请求中向控制器传递了三个文件和几个其他字符串。但我不知道我的验证失败的原因。
这是表格
<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 的回复。
答案 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