验证 ajax 在 Laravel 中上传的文件



我想验证AJAXlaravel中上传的文件,这是我在控制器中的代码:

public function changePicture(Request $request)
{
// get file : 
$file = $request->file('image');
$validator = Validator::make($request->all(), [
'image' => 'image|mimes:jpg,jpeg,gif,png|max:2048'
]);
if ($validator->fails())
return response()->json(['is' => 'failed', 'error' => $validator->getMessageBag()]);
return response()->json(['is'=>'success']);
}

但是上传不正确的文件时没有任何反应,但是当上传有效文件时,得到第二个响应:

是:成功。

我的JS代码:

$.ajax(
{
url: '/profile/change-picture',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: 'POST',
data: formData,
mimeType: 'multipart/form-data',
contentType: false,
cache: false,
processData: false,
success: function (response){
if(response.is === 'failed'){
$('.ui.modal').modal('show');
}
}
});

但是等待后出现错误:

POST 内容 - 20315736 字节的长度超过 8388608 字节的限制。

任何想法 !!谢谢

将这些道具添加到你的 ajax 中:

jQuery.ajax({
...
contentType: false,
processData: false,

此外,请确保您的文件已附加到表单数据中。有很多方法可以做到这一点,这里有一个:

var data = new FormData();
jQuery.each(jQuery('#image')[0].files, function(index, file) {
data.append('my-image-' + index, file);
});

关于错误

您的网络服务器或 PHP 可能具有最大上传文件大小。我建议使用低于该值的文件进行测试。

8388608字节是8M,这是PHP的默认限制。将 php.ini 中的post_max_size更新为更大的值。

upload_max_filesize设置用户可以上传的最大文件大小,同时post_max_size设置可以通过表单中的 POST 发送的最大数据量。

因此,您可以将upload_max_filesize设置为 1 meg,这意味着用户可以上传的最大单个文件为 1 MB,但如果post_max_size设置为 5,他们可以一次上传 5 个。

最新更新