angular - 如何在删除具有该文件参考的文档时从 Firebase 存储中删除文件?
问题描述
我有一个 Angular 应用程序,它包括项目,每个项目的图像都上传到 Firebase 存储中,并且有一个 img 属性,该属性引用图像的 URL。我想在删除文档的同时删除图像,如何正确操作?
解决方案
您可以使用通过onDelete
事件触发的云函数,请参阅 https://firebase.google.com/docs/functions/firestore-events。
然后,在 Cloud Function 中,您将使用Google Cloud Storage Node.js Client API删除 Cloud Storage 中的文件。
假设bucket
和name
是 Firestore 文档中保存文件存储桶和名称的字段(即“引用图像 URL 的 img 属性”),那么您可以按照以下几行执行操作:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const defaultStorage = admin.storage();
exports.deleteFile = functions.firestore
.document('fileDocuments/{fileDocID}')
.onDelete((snap, context) => {
const deletedValue = snap.data();
const fileBucket = deletedValue.bucket;
const fileName = deletedValue.name;
return defaultStorage
.bucket(fileBucket)
.file(fileName)
.delete();
});
您可以学习以下官方 Cloud Functions 示例或文档项目:
https://firebase.google.com/docs/functions/video-series
https://github.com/firebase/functions-samples
https://cloud.google.com/nodejs/docs/reference/storage/2.5.x/File#delete
推荐阅读
- python - 如何使用 Python 解析 XML 名称和属性(复杂)
- java - 如何将 getChildFragment 用于 googlemaps?
- ruby - RVM 无法安装 ruby-2.2.4 但可以安装其他(较新)版本
- python - 具有 3D 数组的 Scipy 稀疏点积
- javascript - React - Native ' Redux 未捕获错误:操作必须是普通对象。按下按钮时使用自定义中间件进行异步操作
- python - Python将列表的元素添加在一起以获得新列表
- c# - 从 KeyUp 事件的列表中删除元素
- html - 如何控制 HTML/Angular 中全选操作的范围?
- android - MapBox Android:调用onCreateView时位置监听片段崩溃
- python - 如何在数组C中返回一堆元素