Делаю кроп фотографии через ngx-image-cropper и пытаюсь отправить кроп на сервер (PHP Yii2).
Несколько уроков в интернете нашел, везде ± одинаковый алгоритм, но видать что-то упускаю. Итак, компонент:
imageCropped(event: ImageCroppedEvent) {
this.croppedImage = event.base64;
}
uploadAttachmentToServer() {
const fileToUpload: File = new File([this.croppedImage], 'avatar.png');
this.profileService.uploadAvatar(fileToUpload).subscribe(data => {
console.log(data);
}, error => {
console.log(error);
});
}
В this.croppedImage лежит кропнутый блоб.
Сервис:
export const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'multipart/form-data',
}),
observe: 'response' as 'body',
};
uploadAvatar(file: File): Observable<HttpResponse<any>> {
const url = `${this.url}/avatar`;
const formData: FormData = new FormData();
formData.append('uploadFile', file, file.name);
return this.http.post<HttpResponse<any>>(url, file, httpOptions);
}
В итого в нетворке видим, что запрос ушел, а RequestPaylod видно данные файла, что-то типа:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAKACAYAAAAMzckj...
Но в PHP данные приходят не в переменную $_FILES как при обычном механизме отправки формы, а в тело запроса. Можно конечно какие-нибудь надстройки сделать, что бы файл получать из body, а не стандартным механизмом, но может есть еще варианты? Как сделать что бы ангуляр отправлял файл как при обычном ?