0

Я красный некоторые темы по этому вопросу (например: Uploading image to Firebase Storage from Cordova app), но не нашли мой ответ ...магазин изображение Firebase хранения от Cordova плагин камеры на ионическом

Я работаю над проектом IONIC с реализацией плагина камеры ngCordova, чтобы сделать снимок и получить pic из librairy.

Итак, я получил результат как URI изображения, и я хочу загрузить его в хранилище Firebase (в виде файла или Blob). Вот мой код:

$scope.fromCamera = function() { 
$ionicPlatform.ready(function() { 

    var options = { 
    quality: 75, 
    destinationType: Camera.DestinationType.FILE_URI, 
    sourceType: Camera.PictureSourceType.CAMERA, 
    allowEdit: true, 
    encodingType: Camera.EncodingType.JPEG, 
    targetWidth: 300, 
    targetHeight: 300, 
    saveToPhotoAlbum: true e 
    }; 

    $cordovaCamera.getPicture(options).then(function(imageURI) { 
    window.resolveLocalFileSystemURL(imageURI, function (fileEntry) { 
     fileEntry.file(function (file) { 
     var reader = new FileReader(); 
     reader.onloadend = function() { 
      // This blob object can be saved to firebase 
      var blob = new Blob([new Uint8Array(this.result)], { type: "image/jpeg" });     

      // Create the storage ref 
      var ref = storageRef.child('images/test'); 
      // Upload the file 
      uploadPhoto(blob, ref); 

     }; 
     reader.readAsArrayBuffer(file); 
     }); 
    }, function (error) { 
     console.log(error) 
    }); 
    }); 

}); 

};

Я прочитал файл и конвертировал его в Blob, прежде чем загружать его в firebase. И я получил «Ошибка кодирования», говорящую мне: «URI, предоставленный API, был искажен, или результирующий URL-адрес данных превысил ограничения длины URL-адресов для URL-адресов данных».

Я запускаю его хромированный браузер с расширением Кордовы Мокс.

Любая помощь приветствуется! Благодаря

+0

Что находится в 'uploadPhoto'? –

+0

@ Аарон Сондерс, моя функция uploadPhoto() здесь! Спасибо за ваш интерес! :) –

ответ

0

uploadPhoto() моя функция, чтобы загрузить файл на firebase хранения (и сохранить URL в firebase базе данных)

var storageRef = Firebase.storageRef(); 
var databaseRef = Firebase.databaseRef(); 

var uploadPhoto = function(file, ref) { 
    var task = ref.put(file); 
    // Update progress bar 
    task.on('state_changed', function(snapshot){ 
    // nothing 
    }, function(error) { 
    // Handle unsuccessful uploads 
    }, function() { 
    // Handle successful uploads on complete 
    $scope.downloadURL = task.snapshot.downloadURL; 
    $scope.actualKey = databaseRef.child('posts').push().key; 

    databaseRef.child('posts/' + $scope.actualKey).update({ 
     url : $scope.downloadURL, 
     id : $scope.actualKey, 
     time : firebase.database.ServerValue.TIMESTAMP, 
    }); 
    } 
); 

}

0

попытаться изменить ...

[new Uint8Array(this.result)] 

до этого

[this.result] 

альтернативный подход с использованием $cordovaFile

var fileName = imageURI.replace(/^.*[\\\/]/, ''); 

$cordovaFile.readAsArrayBuffer(cordova.file.tempDirectory, fileName) 
    .then(function (success) { 
    // success - get blob data 
    var imageBlob = new Blob([success], { type: "image/jpeg" }); 

     // Create the storage ref 
     var ref = storageRef.child('images/test'); 
     // Upload the file 
     uploadPhoto(imageBlob, ref); 

    }, function (error) { 
    // error 
    }); 

Вместо того, чтобы путь от URI, в коде, я предполагаю следующее ...

// modify the image path when on Android 
    if ($ionicPlatform.is("android")) { 
    path = cordova.file.cacheDirectory 
    } else { 
    path = cordova.file.tempDirectory 
    } 

стесняйтесь разобрать путь, чтобы получить каталог

+0

проверить это видео - http://buff.ly/2ataSWC и посмотреть обновленный код ... –

+0

Спасибо за вашу помощь, я попробую это. И видео идеально! –

+0

С вашей помощью он работает! Спасибо (я подтверждаю ваш ответ, но поскольку у меня недостаточно «очков», я не знаю, работает ли это). –

Смежные вопросы