Cloud Functions for Firebase:在文件上传时写入数据库
Cloud Functions for Firebase: write to database on fileupload
我有一个云函数(generateThumbnail 示例函数的修改版本)。我想创建缩略图,但我还想获取图像的宽度和高度,并更新数据库中的尺寸值。
分解这个问题:
- 我需要获取当前数据库的快照
- 导航到数据库
/projects
- 使用文件名找到正确的密钥(project.src == 文件名)
- 获取图像的大小(完成)
- 将
project.size
更新为新值
我做了一些研究,但我只找到了 functions.database.DeltaSnapshot
接口,当你在 functions.database().ref().onwrite(snapshot => {})
上收听时,它是给定的
projects.json:
[{
"name": "lolipop",
"src": "lolipop.jpg",
"size": ""
},{
"name": "cookie",
"src": "cookie.jpg",
"size": ""
}]
可以使用 firebase-admin package. Check out this sample 来完成数据库交互,以查看未由数据库写入触发的函数如何访问数据库。
在 Firebase 中通过其中一个键的值访问子节点有点笨拙,最后会详细介绍。
对于每个问题:
1 和 2:在您的数据库中创建对项目密钥的引用
3: 通过 src
键找到您要查找的项目
5: Update 项目
// create reference
const projectsRef = admin.database().ref('projects');
// create query
const srcProjectQuery = projectsRef.orderByChild('src').equalTo(fileName);
// read objects that fit the query
return srcPojectQuery.once('value').then(snapshot => {
const updates = {};
snapshot.forEach(childSnapshot => {
updates[`${childSnapshot.key}/size`] = fileSize;
});
return projectsRef.update(updates);
});
由于您似乎将 src
值视为唯一值,因此使用 src
作为每个项目对象的键可以避免很多麻烦。这会将事情简化为:
const projectsRef = admin.database().ref(`projects/${src}`);
projectsRef.update({'size': fileSize});
我有一个云函数(generateThumbnail 示例函数的修改版本)。我想创建缩略图,但我还想获取图像的宽度和高度,并更新数据库中的尺寸值。
分解这个问题:
- 我需要获取当前数据库的快照
- 导航到数据库
/projects
- 使用文件名找到正确的密钥(project.src == 文件名)
- 获取图像的大小(完成)
- 将
project.size
更新为新值
我做了一些研究,但我只找到了 functions.database.DeltaSnapshot
接口,当你在 functions.database().ref().onwrite(snapshot => {})
projects.json:
[{
"name": "lolipop",
"src": "lolipop.jpg",
"size": ""
},{
"name": "cookie",
"src": "cookie.jpg",
"size": ""
}]
可以使用 firebase-admin package. Check out this sample 来完成数据库交互,以查看未由数据库写入触发的函数如何访问数据库。
在 Firebase 中通过其中一个键的值访问子节点有点笨拙,最后会详细介绍。
对于每个问题:
1 和 2:在您的数据库中创建对项目密钥的引用
3: 通过 src
键找到您要查找的项目
5: Update 项目
// create reference
const projectsRef = admin.database().ref('projects');
// create query
const srcProjectQuery = projectsRef.orderByChild('src').equalTo(fileName);
// read objects that fit the query
return srcPojectQuery.once('value').then(snapshot => {
const updates = {};
snapshot.forEach(childSnapshot => {
updates[`${childSnapshot.key}/size`] = fileSize;
});
return projectsRef.update(updates);
});
由于您似乎将 src
值视为唯一值,因此使用 src
作为每个项目对象的键可以避免很多麻烦。这会将事情简化为:
const projectsRef = admin.database().ref(`projects/${src}`);
projectsRef.update({'size': fileSize});