Я пытаюсь загрузить фотографию на cloudinary
, но мне это не удалось.Я пытался использовать плагин camera
, чтобы прочитать файл из моей галереи, а затем использовать FileReader()
, чтобы прочитать его как ArrayBuffer
, а затем опубликовать его с http
, как описано в моем коде ниже:
import { Cloudinary } from "@cloudinary/angular-5.x";
import { Camera, CameraOptions } from "@ionic-native/camera";
import { File, FileEntry, FileReader } from "@ionic-native/file";
userId: number = 123;
baseUrl: string = 'https://api.cloudinary.com/v1_1/dvy1kjtzu/image/upload';
fromGallery(): void {
this.camera.getPicture({
sourceType: this.camera.PictureSourceType.PHOTOLIBRARY,
destinationType: this.camera.DestinationType.FILE_URI,
quality: 100,
encodingType: this.camera.EncodingType.PNG,
}).then(imageData => {
this.myPhoto = imageData;
this.upload(imageData);
}, error => {
console.log(JSON.stringify(error));
});
}
upload(imageFileUri: any): void {
this.showLoader('Uploading...');
console.log('TYPES', typeof FileReader, '----')
this.file.resolveLocalFilesystemUrl(imageFileUri)
.then((entry: any) => entry.file(file => {
this.readFile(file)}))
.catch(err => console.log(JSON.stringify(err)));
}
readFile(file: any) {
let reader = new FileReader();
reader.onloadend = () => {
const formData = new FormData();
const imgBlob = new Blob([reader.result], {type: file.type});
formData.append('file', imgBlob, file.name);
this.postData(formData);
};
reader.readAsArrayBuffer(file);
}
postData(formData: FormData) {
this.uploadImage(formData, this.userId).then((result: ApiResponse) => {
this.dismissLoader();
console.log('SUCCESS!')
}, (err) => {
this.dismissLoader();
console.log(JSON.stringify(err));
});
}
uploadImage(formData, userId) {
return new Promise((resolve, reject) => {
this.post('users/upload', {
upload_preset:'my_preset',
id: userId
}, formData
).subscribe(response => {
resolve(response);
}, err => {
console.log( JSON.stringify(err));
reject(err);
});
})
}
post(endpoint: string, params: any = null, body: any = null) {
return this.http.post<ApiResponse>(this.baseUrl + '/' + endpoint, body, {
params: params
});
}
появившаяся ошибка указывает: Error in Success callbackId: File1089132322 : TypeError: undefined is not a function
из FileReader()
Я пытался проследить на многих форумах с такой же проблемой:
- поставить
cordova.js
до polyfills.js
в index.html
- обновленные версии
zone.js
и cordova-plugin
(возможно, это проблема некоторых версий) - удален установленный плагин
fileTransfer
- последовал за этим
stackOverflow
вопрос
но без удачи.
Вот мой Ionic info
:
Ionic:
ionic (Ionic CLI) : 4.12.0 (C:\Users\Rahma\AppData\Roaming\npm\node_modules\ionic)
Ionic Framework : ionic-angular 3.9.3
@ionic/app-scripts : 3.1.9
Cordova:
cordova (Cordova CLI) : 8.0.0
Cordova Platforms : android 6.4.0
Cordova Plugins : no whitelisted plugins (23 plugins total)
System:
NodeJS : v8.12.0 (C:\nodejs\node.exe)
npm : 6.9.0
OS : Windows 10
Любая помощь, пожалуйста?