Я столкнулся с ошибкой в моем ионном приложении для 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
}
);
}Спасибо за ответ, но я уже пытался изменить способ использования putString(), но проблема, похоже, в том, что putString() неизвестен ... Кроме того, с вашим методом я получаю эту ошибку: window.resolveLocalFileSystemURL is not a function



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В конце концов я пришел к решению: вместо использования 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
}
);
}
проверьте мой ответ здесь => stackoverflow.com/a/51471159/1081909