У меня есть небольшое приложение Symfony 4 с кроппером, использующим CroppieJS.
Когда я обрезаю и нажимаю кнопку сохранения, Кроппи посылает мне изображение base64:
$( "#cropSave" ).click(function() {
basic.croppie('result','canvas'
).then(function (result) {}
как отправить этот результат на мой контроллер и сохранить образ с помощью VichUploader и Doctrine?
Вот мой контроллер:
public function updateProfilePicture(Request $request): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
$user->setImageFile($request->files->get('image'));
$entityManager->flush();
return new Response("ok");
}
Я много чего пробовал, но мне не хватает опыта, потому что это не работает:
var form = document.getElementById("myAwesomeForm");
var ImageURL = result;
// Split the base64 string in data and contentType
var block = ImageURL.split(";");
// Get the content type of the image
var contentType = block[0].split(":")[1];
// get the real base64 content of the file
var realData = block[1].split(",")[1];
// Convert it to a blob to upload
var blob = b64toBlob(realData, contentType);
// Create a FormData and append the file with "image" as parameter name
var formDataToUpload = new FormData(form);
formDataToUpload.append("image", blob);
или
function urltoFile(url, filename, mimeType){
return (fetch(url)
.then(function(res){return res.arrayBuffer();})
.then(function(buf){return new File([buf], filename, {type:mimeType});})
);
}
вот один из моих запросов ajax:
$.ajax({
type : "POST",
data: formDataToUpload,
url : $('#updateProfilePictureLink').val(),
contentType:false,
processData:false,
cache:false,
dataType:"json",
success : function(response) {
$('#profilePicture').attr('src', result);
alert(response);
},
error : function (response) {
alert("error !");
}
});
Я подумал, может быть, "Имитировать" загрузку файла в JS из base64, используя поле ввода VichUploader formType, но я хочу знать, есть ли более простые способы.
Спасибо