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

Я столкнулся с ошибкой в ​​моем ионном приложении для Android. Используя тот же код, что и в моем приложении для ios (ionic с двумя платформами: 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 не является функцией

В моем приложении для ios работает функция .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.info("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
     }
     );
}

проверьте мой ответ здесь => stackoverflow.com/a/51471159/1081909

NullPointer 01.08.2018 16:54

Спасибо за ответ, но я уже пытался изменить способ использования putString(), но проблема, похоже, в том, что putString() неизвестен ... Кроме того, с вашим методом я получаю эту ошибку: window.resolveLocalFileSystemURL is not a function

Memphis 01.08.2018 17:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов я пришел к решению: вместо использования 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.info("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
     }
     );
}

Другие вопросы по теме