Загрузить с Firebase как JSON, используя JavaScript - PullRequest
0 голосов
/ 18 мая 2018

Я хочу экспортировать объект Firebase из JavaScript как JSON и загрузить его.Например, этот элемент находится в ссылке patients/.Я хотел бы загрузить его в файл .json в следующем формате:

"-LCZPCkiGCNhFaQ8ckJ-" : {
  "altura" : 165,
  "apellido" : "Salas",
  "extra" : {
    "Jubilado" : "No",
    "Localidad" : "Madrid",
    "Telefono" : "698532147"
  },
  "fechaNacimiento" : "14/10/1961",
  "nombre" : "Paquita",
  "sexo" : "Mujer"
}

Мне удалось загрузить только файл, хранящийся в хранилище, но не в базе данных реального времени

 firebase.storage().ref('grabaciones/').child(grabacion).getDownloadURL().then(function (url) {
  let a = document.createElement("a");
  a.download = grabacion;
  a.href = url;
  document.body.appendChild(a);
  a.click();
}).catch(function (error) {
  // Handle any errors
  console.log(error);
});

Заранее благодарим.

Обновлен код, в котором элемент получен в виде JSON и загружен как .json.Работает только в Firefox:

$scope.exportarJSON = function (paciente) {
        console.log(grabacion);
        firebase.database().ref('pacientes/').child(pacinte).once('value', function (paciente) {
          download(paciente + ".json", JSON.stringify(paciente.val()));
        });
    };



 function download(filename, text) {
    var element = document.createElement('a');
    element.setAttribute('href', 'data:text/json;charset=utf-8,' + encodeURIComponent(text));
    element.setAttribute('download', filename);

    element.style.display = 'none';
    document.body.appendChild(element);

    element.click();

    document.body.removeChild(element);
  }

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Каждая часть данных в вашей базе данных Firebase имеет свой уникальный URL.Например, я быстро импортировал ваши образцы данных в одну из моих баз данных, и теперь они живут на https://stackoverflow.firebaseio.com/50408054/-LCZPCkiGCNhFaQ8ckJ-.

Если вы перейдете по этому URL, вам будет предложено войти в систему. Поскольку у вас нет доступа к моему проекту, вы не сможете увидеть консоль моей базы данных.

Но вы может получить доступ к данным в формате JSON.Поскольку я предоставил открытый доступ для чтения к данным, вы можете обращаться к ним в формате JSON по следующему URL: https://stackoverflow.firebaseio.com/50408054/-LCZPCkiGCNhFaQ8ckJ-.json.Как вы можете видеть, это тот же URL, что и раньше, но теперь с добавлением .json в конце.

Это часть REST API Firebase, которая полностью описана здесь: https://firebase.google.com/docs/database/rest/start.Вы должны иметь возможность использовать этот REST URL в своей ссылке для скачивания, если данные доступны для публичного чтения.

0 голосов
/ 19 мая 2018

Наконец мне удалось это сделать, получив данные из Firebase и применив к этим данным JSON.stringify ().Позже, чтобы загрузить их в виде файла .json, я создал Blob со строкой, следующей за кодом этот вопрос .Спасибо за ответы, они вдохновляют

 $scope.exportarJSON = function (paciente) {
        console.log(grabacion);
        firebase.database().ref('pacientes/').child(pacinte).once('value', function (paciente) {
          download(paciente + ".json", paciente.val());
        });
    };


function download(filename, paciente) {
    let file = JSON.stringify(paciente);
    let blob = new Blob([file], {type: "application/json"});
    let url  = URL.createObjectURL(blob);
    let element = document.createElement('a');
    element.setAttribute('href', url);
    element.setAttribute('download', paciente.nombre + ".json");

    element.style.display = 'none';
    document.body.appendChild(element);

    element.click();

    document.body.removeChild(element);
  }
0 голосов
/ 18 мая 2018

Вы можете использовать вызываемую функцию следующим образом:

Код облачной функции (index.js)

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();

exports.getJSON = functions.https.onCall((data, context) => {

    return admin.database().ref('yourLocation').once('value')
        .then(function(snapshot) {
            return snapshot.val();
    });

    //Note that yourLocation is hardcoded in this example but could be obtained from 
    //the data parameter, which value comes from the JavaScript call in your web page    

});

Код на веб-страницеНапример:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script src="https://www.gstatic.com/firebasejs/5.0.3/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/5.0.3/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/5.0.3/firebase-functions.js"></script>

</head>
<body>

<script>

    // Initialize Firebase
    var config = {
        apiKey: "....",
        authDomain: "",
        databaseURL: "",
        projectId: ""
    };

    firebase.initializeApp(config);

    var getJSON = firebase.functions().httpsCallable('getJSON');
    getJSON().then(function(result) {
        console.log(JSON.stringify(result.data));
    }).catch(function(error) {
        // Getting the Error details.
        var code = error.code;
        var message = error.message;
        var details = error.details;
        // ...
    });

</script>


</body>
</html>

Документ о вызываемых функциях вы найдете здесь: https://firebase.google.com/docs/functions/callable

Обратите внимание, что эту функцию также можно вызывать из приложений iOS или Android.,

Вы можете сделать что-то похожее с простой облачной функцией HTTPS и вызвать ее как конечную точку REST API (например, с библиотекой Axios).Одним из преимуществ использования вызываемой функции является то, что «Аутентификация Firebase и токены FCM автоматически включаются в запросы», поэтому вы можете легко ограничить вызовы только авторизованным пользователям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...