Как я могу получить DownloadableURL из хранилища Firebase, используя внутреннее хранилище в приложении node.js? - PullRequest
0 голосов
/ 25 мая 2019

Я относительно новичок в firebase и в настоящее время работаю с приложением node.js (реагировать на электрон), моя цель - показать изображение, которое было сохранено в firebase-storage.

В моем приложении я знаю внутренний URL-адрес хранилища базы данных gs://myapp.appspot.com/folders/image.jpg и хочу получить downloadableURL https://firebasestorage.googleapis.com/...

Так вот в чем проблема: я знаю, что есть метод refFromURL() и getDownloadURL() из хранилища Firebase, и я планировал сделать это

import firebase from 'firebase';
import config from './firebaseConfig.json';
firebase.initializeApp(config);
var storage = firebase.storage();

function fetchTrueImgsrc(internalSrc) {
  if (internalSrc === undefined) return null;
  return storage.refFromURL(internalSrc).getDownloadURL();
}

И я получил это

Строка 4: Uncaught TypeError: firebase__WEBPACK_IMPORTED_MODULE_1___default.a.storage не является функцией

Я обнаружил, что firebase.storage () больше не поддерживает node.js и весь документ на https://firebase.google.com/docs/storage/web/start совершенно бесполезен для меня

Итак, вопрос в том, как бы я реализовал это на стороне клиента node.js, если я не могу использовать firebase.storage? пожалуйста, помогите.

Я пробовал:

const myappBucket='myapp.appspot.com';
import { Storage } from '@google-cloud/storage';
const bucket = new Storage().bucket(myappBucket);
const file = bucket.file(internalSrc); 
file
  .getSignedUrl({
    action: 'read',
    expires: '03-09-2491'
  })
  .then(signedUrls => {
    console.log('signed URL', signedUrls[0]); // this will contain the picture's url
    return;
  })
  .catch(err => console.error(err));
const myappBucket='myapp.appspot.com';
import config from './firebaseConfig.json';
import firebase_admin from 'firebase-admin';
firebase_admin.initializeApp(config);
var storage = firebase_admin.storage();
var bucket = storage.bucket(myappBucket);
bucket.file(internalSrc).getSignedUrl(
  {
    action: 'read',
    expires: '03-09-2491'
  },
  function(err, url) {
    if (err) {
      console.error(err);
    } else {
      console.log('Download model DL url: ' + url);
    }
  }
);

Оба получили эту ошибку

SigningError: непредвиденная ошибка при определении среды выполнения: не удалось получить данные в GoogleAuth.

Я пытался избежать понижения firebase до firebase@v4.7.0, но если для этого нет решения, думаю, мне тоже стоит попробовать.

Я использую: - "@ google-cloud / storage": "^ 2.5.0" - "пожарная база": "^ 6.0.2" - "firebase-admin": "^ 7.3.0" - "реагировать": "^ 16.8.6" - «электрон»: «^ 3.0.10»

спасибо.

1 Ответ

0 голосов
/ 26 мая 2019

Вот пример кода, который возвращает URL загрузки для вашего файла после загрузки с использованием ADMIN SDK:

firebase.storage().bucket().upload('your/file', {
                destination: `where/you/want/it`,
            }).catch((error) => {
                throw error;
            }).then((result) => {
                result[0].getSignedUrl({
                    action: 'read'
                }).then((url) => {
                    url[0] // your url
                })
            });

Вот точно такой же вопрос: Пост

...