如何使用node.js应用程序中的内部存储位置从Firebase存储中获取DownloadableURL?

时间:2019-05-25 19:15:15

标签: node.js electron google-cloud-storage firebase-storage

我是Firebase的新手,目前正在研究node.js(反应电子)应用程序,我的目标是显示一些存储在firebase存储中的图片。

在我的应用中,我知道内部Firebase存储URL gs://myapp.appspot.com/folders/image.jpg,并希望获取 downloadableURL https://firebasestorage.googleapis.com/...

这就是问题所在:我知道Firebase存储中有refFromURL()getDownloadURL()方法,并且我打算这样做

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行:未捕获的TypeError:firebase__WEBPACK_IMPORTED_MODULE_1 ___ default.a.storage不是函数

我发现firebase.storage()不再支持node.js,https://firebase.google.com/docs/storage/web/start上的所有文档对我来说完全没有用

所以问题是,如果我不能使用firebase.storage,该如何在node.js客户端中实现呢?请帮忙。

我尝试过:

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”     -“ firebase”:“ ^ 6.0.2”     -“ firebase-admin”:“ ^ 7.3.0”     -“反应”:“ ^ 16.8.6”     -“电子”:“ ^ 3.0.10”

谢谢。

1 个答案:

答案 0 :(得分:0)

下面是一个代码示例,该示例使用ADMIN SDK上传后返回文件的下载URL:

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
                })
            });

这是完全相同的问题:Post