Загрузка видео в хранилище firebase (3.0) с помощью cordovaFileTransfer

cordova-plugins firebase-storage

2334 просмотра

1 ответ

185 Репутация автора

Создаю гибридное приложение с использованием хранилищ Ionic, (ng) Cordova и Firebase.

Ранее сопряжение захвата мультимедиа Cordova (например, для захвата видео) и передачи файлов Cordova (для загрузки его куда-либо) работало примерно так, как говорится в этом вопросе .

Я изо всех сил пытаюсь понять, как добиться того же самого с помощью нового процесса загрузки Firebase Storage, который не использует адрес сервера:

var uploadTask = storageRef.child('videos/' + file.name).put(file);

У меня такое ощущение, что теперь мне нужно добавить еще один шаг для фактического доступа к файлу с устройства - это было ранее обработано плагином для передачи файлов.

Я могу упустить что-то очень очевидное - если так, то извинения и спасибо.

Автор: Goose Источник Размещён: 18.07.2016 02:59

Ответы (1)


6 плюса

185 Репутация автора

Решение

Хорошо, я наконец-то получил это работает.

Если вы хотите использовать описанный здесь новый метод загрузки хранилища Firebase, вы больше не хотите использовать плагин Cordova FileTransfer (который сделал за вас грязную работу).

Теперь вам нужно сначала прочитать файл, используя плагин Cordova File (ng). В зависимости от вашего файла вы должны прочитать его наиболее подходящим способом - в моем случае, потому что я пытался читать видео, я читал его как буфер массива.

После прочтения вам необходимо преобразовать его в BLOB-объект (посмотреть синтаксис), и тогда загрузка будет проходить гладко:

  var file_path = "root/to/directory";
  var name = "filename.mp4";

                $cordovaFile.readAsArrayBuffer(file_path, name)
                    .then(function (success) {
                        // success
                        console.log(success);

                      blob = new Blob([success], {type: "video/mp4"});

                      console.log(blob);

                      var uploadTask = storageRef.child(name).put(blob);

                      uploadTask.on('state_changed', function(snapshot){
                        // Observe state change events such as progress, pause, and resume
                        // See below for more detail

                          var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
                          console.log('Upload is ' + progress + '% done'); 

                      }, function(error) {
                        // Handle unsuccessful uploads
                        console.log("Error uploading: " + error)
                      }, function() {
                        // Handle successful uploads on complete
                        // For instance, get the download URL: https://firebasestorage.googleapis.com/...
                        var downloadURL = uploadTask.snapshot.downloadURL;
                        console.log("Success!", downloadURL);
                      });

                      }, function (error) {
                        // error
                        console.log("Failed to read video file from directory, error.code);

                      }

                      );

NB: 1) Это относится к API web / javascript - API для Android и iOS будут разными. 2) Помните, что тип файла может варьироваться в зависимости от устройства, поэтому вам нужно это обработать. 3) Я использую ngCordova, но то же самое относится и к обычному плагину cordova / phonegap.

Надеюсь, вы найдете это полезным.

Автор: Goose Размещён: 21.07.2016 10:24
Вопросы из категории :
32x32