我正在尝试将映射添加到fire存储中的键。在控制台中获取undefined
,它正在firetsore中添加一个空映射。
我正在存储中同时上传多个文件并获取imageUrl。CCD_ 2。
const onUploadFiles = async (images) => {
let imageUrls = {};
Promise.all(
images.map(async (image) => {
const fileRef = storage.ref(`${scanID}/${chapterNumber}/${image.name}`);
await fileRef.put(image);
imageUrls[getFileName(image.name)] = await fileRef
.getDownloadURL()
.toString();
console.log(imageUrls[getFileName(image.name)]);
})
);
return imageUrls;
};
文件上传后,我试图将此地图添加到文档中,并将其添加到firestore中。
实用性函数,用于将文件名存储为关键字。const getFileName = (name) => name.replace(/.[^/.]+$/, '');
将这些url添加为文档。
//add chapter to firestore
const addChapter = async (images) => {
var chapter = {
id: uuidv4(),
title: title,
chapterNumber: chapterNumber,
};
await onUploadFiles(images)
.then((imageUrls) => {
chapter['images'] = imageUrls;
})
.catch((error) => {
console.log('Something went wring with database');
});
db.collection('chapters')
.doc(scanID)
.set(
{
[chapterNumber]: chapter,
},
//merge
{ merge: true }
)
.then(() => {
console.log('Done');
});
};
预期输出:
{
"0":{
"title":"title 1",
"id":"232131-321-312-331",
"chapterNumber":0,
"images":{
"0":"0.png",
"1":"1.png"
}
}
}
我在消防仓库里得到一张空的{}
地图。
如果我没有误解,您希望首先将图像上传到Firebase云存储桶,然后检索下载URL,将其包含在您为Firestore集合创建的文档中。如果是这样的话,那么在这个相关的问题中,有一个脚本可以帮助您将图像上传到Firebase Storage。我已经测试了这个脚本,它正在我的测试节点环境中工作。我从你的代码和我链接的脚本中注意到,没有firebaseStorageDownloadTokens
属性为你的URL提供下载令牌:
const metadata = {
metadata: {
// This line is very important. It's to create a download token.
firebaseStorageDownloadTokens: uuid()
},
...
我链接了一个与下载代币以及如何创建和获取代币相关的指南。最后,关于如何从添加到Firestore的变量中创建Map对象,文档为Firestore提供了一个对象示例:
const data = {
stringExample: 'Hello, World!',
booleanExample: true,
numberExample: 3.14159265,
dateExample: admin.firestore.Timestamp.fromDate(new Date('December 10, 1815')),
arrayExample: [5, true, 'hello'],
nullExample: null,
//Map object
objectExample: {
a: 5,
b: true
}
};