Wenn das Formular auf dem normalen Weg übermittelt wird, gibt es bei der Hintergrundüberprüfung kein Problem:
$file = $request->avatar;
$input = array('image' => $file);
$rules = array(
'image' => 'image'
);
$validator = \Validator::make($input, $rules);
if ( $validator->fails() ) {
return \Response::json([
'success' => false,
'errors' => $validator->getMessageBag()->toArray()
]);
}
Bei der Übermittlung mit dem formData-Objekt wird die Bilddatei jedoch in eine Blob-Datei konvertiert und kann nicht überprüft werden:
$('#uploadAvatar').on('click', function (e) {
$('#uploadAvatar').html('正在保存...');
$("#image").cropper('getCroppedCanvas').toBlob(function (blob) {
var formData = new FormData();
formData.append('croppedImage', blob);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: "POST",
url: "{{ url('/avatar') }}",
processData: false,
contentType: false,
cache: false,
data: formData
}).done(function (response) {
showResponse(response);
}).fail(function (data) {
alert('提交失败,请尝试重新提交');
});
});
});
Wie kann der Hintergrund überprüfen, ob es sich bei der Blob-Datei um ein Bild handelt?
很简单啊,搞个临时变量还原回来不就好了?
$file = file_put_contents('/path/to/new/file_name', $blob);
扩展验证规则用
getimagesize
可以用 base64 流的方式