Я хочу экспортировать объект 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.info(error);
});
Заранее спасибо.
Обновленный код, в котором элемент получается как JSON и загружается как .json. Работает только в Firefox:
$scope.exportarJSON = function (paciente) {
console.info(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);
}



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


Вы можете использовать вызываемую функцию следующим образом:
Код облачной функции (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.info(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 автоматически включаются в запросы», поэтому вы можете легко ограничить вызовы только авторизованным пользователям.
Каждый фрагмент данных в вашей базе данных 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. Вы должны иметь возможность использовать этот URL-адрес REST в своей ссылке для загрузки, если данные доступны для всеобщего чтения.
Спасибо за ответ, но мне нужна информация, недоступная публично. Мне удалось это сделать, следуя стратегии @RenaudTarnec, как вы можете видеть в ответе, но спасибо за интересную информацию.
Я считаю, что ссылка изменилась на: firebase.google.com/docs/database/rest/start
Наконец, мне удалось это сделать, получив данные из Firebase и применив к ним JSON.stringify (). Позже, чтобы загрузить их как файл .json, я создал Blob со строкой, следующей за кодом этот вопрос. Спасибо за ответы, они вдохновляли
$scope.exportarJSON = function (paciente) {
console.info(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);
}
Хорошо, думаю, я понял идею. Я попытался реализовать его, не прибегая к функциям Firebase, и, похоже, он работает, я добавил его к вопросу. Я также добавил функцию загрузки, чтобы загрузить файл как .json, как описано в этот вопрос, но я получаю его только работать в Firefox. Часть загрузки будет отсутствовать в вашем коде. Спасибо за Ваш ответ