Cordova-plugin-camera: ref.putString не является функцией

1

Я столкнулся с ошибкой в своем приложении для ионных андроидов. Используя тот же самый код, что и мое приложение ios (ионное с двумя платформами: android и ios), я не могу отправить base64 uri в Firebase storage.

Ошибка:

Uncaught TypeError: mountainImagesRef.putString is not a function at navigator.camera.getPicture.quality(controllers.js:202) at Object.callbackFromNative(cordova.js:294) at <anonymous>:1:9

Я видел что-то подобное здесь, но решение было обновить плагин, и я уже использую последнюю версию cordova-plugin-camera: V 4.0.3. Uncaught TypeError: ref.putString не является функцией

В моем приложении .putString() работает функция .putString() ! Как я могу сделать эту работу в своем приложении для Android? Вы видите что-то, что я сделал неправильно? Я пробовал много способов использовать putString например uri.substring(0,23)... и т.д.

 function takePic()
 {
 
  navigator.camera.getPicture(
    function(uri){

	$ionicPopup.alert({
	         title: 'A new image',
	         template: 'Loading !'
	});
	
	// Create a root reference
	var storageRef = firebase.storage().ref();

	var filename = Math.floor((Math.random()*10000)+ 1);
	var newAvatar_name = filename+".jpg";

	var mountainImagesRef = storageRef.child("avatars/"+newAvatar_name);

	mountainImagesRef.putString(uri, "base64").then(function(snapshot) {
		console.log("Uploaded a base64 string!");
	});

    },
    function(){
	   $ionicPopup.alert({
	         title: 'Error',
	         template: 'impossible to select one'
	         });
    },
    {

    	    quality: 60,
    	    targetHeight: 300,
    	    targetWidth: 300,
        	destinationType: 0,
        	sourceType: 1,
        	mediaType: 0,
        	saveToPhotoAlbum: false
     }
     );
}
  • 0
    проверьте мой ответ здесь => stackoverflow.com/a/51471159/1081909
  • 0
    Спасибо за ваш ответ, но я уже пытался изменить способ, которым я использую putString() , но проблема, кажется, в том, что putString() не известна ... Кроме того, с вашим методом я получаю эту ошибку: window.resolveLocalFileSystemURL is not a function
Теги:
cordova

1 ответ

0
Лучший ответ

Я, наконец, пришел к решению, вместо того, чтобы использовать putString() который, кажется, является проблемой, я преобразовал камеру uri в файл blob и затем использовал put().

function takePic()
 {
 
  navigator.camera.getPicture(
    function(uri){

	$ionicPopup.alert({
	         title: 'A new image',
	         template: 'Loading !'
	});
	
	// Create a root reference
	var storageRef = firebase.storage().ref();

	var filename = Math.floor((Math.random()*10000)+ 1);
	var newAvatar_name = filename+".jpg";

	var mountainImagesRef = storageRef.child("avatars/"+newAvatar_name);

// Convert the uri into a byteArray

var contentType = contentType || '';
    var sliceSize = sliceSize || 512;

    let byteCharacters = atob(uri);
    let byteArrays = [];

    for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        let slice = byteCharacters.slice(offset, offset + sliceSize);

        let byteNumbers = new Array(slice.length);
        for (let i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        let byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }


    var mountainImagesRef = storageRef.child("avatars/"+newAvatar);

// Use the byteArrays to get my Blob

    var blob = new Blob(byteArrays);

    mountainImagesRef.put(blob).then(function(snapshot) {
        console.log("Uploaded a base64 string!");
    });
    
  },
    function(){
	   $ionicPopup.alert({
	         title: 'Error',
	         template: 'impossible to select one'
	         });
    },
    {

    	    quality: 60,
    	    targetHeight: 300,
    	    targetWidth: 300,
        	destinationType: 0,
        	sourceType: 1,
        	mediaType: 0,
        	saveToPhotoAlbum: false
     }
     );
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню