Я пытаюсь загрузить файл в Ionic 4 на сервер, но получаю сообщение об ошибке 2nd parameter must be blob
.
Но я зарегистрировал изображение блоба, оно идет правильно.
Я следую по этой https://devdactic.com/ionic-4-image-upload-storage/ этой ссылке для руководства.
Мне не нужно сохранять это в локальном хранилище, поэтому я пропустил этот раздел.
selectImageInGallery() {
const options: CameraOptions = {
quality: 100,
sourceType: this.camera.PictureSourceType.PHOTOLIBRARY,
destinationType: this.camera.DestinationType.FILE_URI,
encodingType: this.camera.EncodingType.JPEG,
mediaType: this.camera.MediaType.PICTURE,
saveToPhotoAlbum: false
};
this.camera.getPicture(options).then(
imageData => {
const formData = this.uploadAvatar(imageData);
this.uploadAvatar(formData);
},
err => {
this.toastService.presentToastBottom('Failed to select the image');
}
);
}
uploadAvatar(imagePath: any) {
let fileName = '';
this.file
.resolveLocalFilesystemUrl(imagePath)
.then(fileEntry => {
const { name, nativeURL } = fileEntry;
const path = nativeURL.substring(0, nativeURL.lastIndexOf('/'));
fileName = name;
return this.file.readAsArrayBuffer(path, name);
})
.then(buffer => {
const imgBlob = new Blob([buffer], {
type: 'image/jpeg'
});
console.log(imgBlob);
const formData: FormData = new FormData();
formData.append('avatar', imgBlob);
this.userService.updateAvatar(formData).then(res => {
console.log(res);
this.loader.hideLoader();
// if (res.data.status === 'success') {
// this.user = res.data.user;
// } else if (res.data.status === 'error') {
// this.toastService.presentToast(res.data.message);
// } else {
// this.toastService.presentToast('Server Error');
// }
});
});
}
Service
public async updateAvatar(postData: any) {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'multipart/form-data',
'X-Authorization': environment.appKey,
Authorization: localStorage.getItem('TOKEN_KEY')
})
};
const res = await this.http
.post(
environment.apiUrl + 'user/update-profile-picture',
postData,
httpOptions
)
.toPromise();
return res as any;
}