我是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”
谢谢。
答案 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