У меня проблема с тем, что возвращаемый uri имеет формат:
"content: //com.android.providers.media.documents/document/image%3A18112"
вместо:
"/ хранилище данных / эмуляция / 0 / Анимированные GIF-файлы WhatsApp / Media / WhatsApp / VID-20191026-WA0003.mp4"
Это кажется проблемой только при выборе изображения из галереи. С видеофайлами это правильный формат. моя версия для плагина:
"@ ionic-native / camera": "^ 5.15.1"
"cordova-plugin-camera": "^ 4.1.0"
Какие последние версии, насколько я знаю. Я тестирую на Samsung Galaxy S8.
Мой код указан ниже:
import { Injectable } from '@angular/core';
import { CameraOptions, Camera, MediaType } from '@ionic-native/camera/ngx';
import { CameraProviderResponse } from '../objects/cameraProviderResponse';
@Injectable()
export class CameraProvider {
constructor(public camera: Camera) {
}
openCamera(selectedMediaType: MediaType, allowedMediaType: MediaType): Promise<CameraProviderResponse> {
const options: CameraOptions = {
sourceType: this.camera.PictureSourceType.SAVEDPHOTOALBUM,
destinationType: this.camera.DestinationType.FILE_URI,
mediaType: selectedMediaType
};
return this.camera.getPicture(options).then((mediaPath) => {
let re = /(?:\.([^.]+))?$/;
let fileExtension = re.exec(mediaPath)[0];
let mediaType;
if (fileExtension === '.jpeg' || fileExtension === '.jpg' || fileExtension === '.png' || fileExtension === '.gif' && (allowedMediaType === MediaType.ALLMEDIA || allowedMediaType === MediaType.PICTURE)) {
mediaType = MediaType.PICTURE;
}
else if (fileExtension === '.mp4' && (allowedMediaType === MediaType.ALLMEDIA || allowedMediaType === MediaType.PICTURE)) {
mediaType = MediaType.VIDEO;
}
else {
return this.openCameraFailed();
}
return {
success: true,
mediaPath: mediaPath,
mediaType: mediaType,
fileExtension: fileExtension
};
}, error => {
return this.openCameraFailed();
}).catch(error => {
console.log(error);
return this.openCameraFailed();
});
}
openCameraFailed(): CameraProviderResponse {
return {
success: false
};
}
}
Если вам нужна дополнительная информация. Пожалуйста, спросите.