当尝试获取刚上传到存储中的图像的downloadURL时,我一直收到“未定义XMLHttpRequest”的消息。对这里发生的事情有什么想法吗?我可以检索元数据,但是该方案中未列出图片网址:/
节点:
import firebase, { storage } from './firebase';
const serviceAccount = require('./serviceAccountKey.json');
const admin = require('firebase-admin');
const app = express()
const dbUrl = "https://authentication.firebaseio.com"
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: dbUrl,
storageBucket: 'authentication.appspot.com'
});
//Initalize bucket
const bucket = admin.storage().bucket();
......
bucket.upload(imageUrl).then(result => {
const file = result[0];
return file.getMetadata();
}).then(results => {
const ref = storage.ref('users/' + userRecord.uid + '/image').downloadURL();
console.log(ref)
//const metadata = results[0];
//console.log('metadata=', metadata.mediaLink);
//firebase.database().ref('users/' + userRecord.uid + '/image').set(metadata.mediaLink);
}).catch(error => {
console.error(error);
});
})
.catch(function(error) {
console.log("Error creating new user:", error);
});
答案 0 :(得分:1)
大多数不支持将JavaScript的Firebase客户端SDK用于NodeJS。这解释了您的错误-XMLHttpRequest在浏览器上本机可用,但在节点中不可用。如果要运行访问Firebase和Google Cloud资源的服务器端代码,则应使用服务器SDK。
Firebase通过Firebase Admin SDK提供服务器SDK,该SDK在节点上完全可用。对于Cloud Storage访问,Admin SDK重新打包了Google Cloud提供的现有Cloud Storage SDK。
请注意,Google Cloud SDK for Cloud Storage没有提供“下载URL”的概念。它具有类似的使用方式,称为“签名URL”。
答案 1 :(得分:0)
我发现使用全局XMLHttpRequest就足够了,所以我做到了
npm install xhr2
并添加
global.XMLHttpRequest = require("xhr2");
到文件顶部。它对我有用。
答案 2 :(得分:0)
npm install xhr2对我有用。 请注意,一般来说,这不是一个好习惯。 如果您使用的是Firebase Cloud Storage,则应在nodejs级别(服务器)上使用admin sdk(对于服务器),而不要使用firebase客户端sdk。这意味着您将使用谷歌云功能。