使用自定义名称属性在 Firebase 中存储视频 blob,返回未定义
Posted
技术标签:
【中文标题】使用自定义名称属性在 Firebase 中存储视频 blob,返回未定义【英文标题】:Storing a Video blob in Firebase with custom Name attribute, returns Undefined 【发布时间】:2021-12-19 19:16:16 【问题描述】:问题是我的所有集合文档都引用同一个 blob 文件,因为每次上传都会替换现有的存储 blob。
我想我需要为 Blob 分配一个名称,以便在每次上传时存储一个新条目。
尝试使用 Math.random() 分配 Name 但没有奏效。有什么建议吗?
import useParams, useHistory from "react-router-dom";
const productID = useParams();
async function handleSubmitUpload()
if (recordedChunks.length)
const promises = [];
const blob = new Blob(recordedChunks, Name: Math.random(), type: "video/webm");
const reviewRef = await storage().ref(`prodReviews/$blob.Name`)
const uploadTask = await storage().ref(`prodReviews/$blob.Name`).put(blob);
await promises.push(uploadTask);
const videoUrl = await reviewRef.getDownloadURL();
const timestamp = new Date();
await firestore
.collection("products")
.doc(productID)
.collection("productReviewClips")
.add(videoUrl, userID: auth.currentUser.uid, createdDate: timestamp )
history.push(`/product/$productID`);
setRecordedChunks([]);
【问题讨论】:
您只是没有在任何地方定义productID
(至少在所提供的代码 sn-p 中)?
是的,它在别处定义。但问题在于 const blob = new Blob(recor.... 中的 blob 文件的命名
我相信这个 Blob 命名问题可能与这个函数无关。这只是存储的问题。
我只是没有看到 productID
在这个函数的范围内定义。您确定该功能可以访问它吗?尝试在函数开头添加console.log(projectID)
。
尝试const blob = new Blob(recordedChunks, type: "video/webm");
,然后使用 Firestore 生成一个随机 ID:const randomId = firestore.collection("test").doc().id
现在您在上传时使用此 randomID 代替 blob.Name
。
【参考方案1】:
Blob() 构造函数似乎只接受 2 个参数,但您传递的是 3 个参数。您可以使用 Firestore SDK 或 UUID 生成随机 ID 并将它们用作文件名,如下所示:
const blob = new Blob(recordedChunks, type: "video/webm");
// Get a random ID
const randomId = firestore.collection("test").doc().id
// Upload to Firebase Storage
const reviewRef = await storage().ref(`prodReviews/$randomId`)
【讨论】:
以上是关于使用自定义名称属性在 Firebase 中存储视频 blob,返回未定义的主要内容,如果未能解决你的问题,请参考以下文章
带有 firebase nuxt 模块的 Firebase 存储在删除文件后无法读取未定义的属性“删除”
可以在 Firebase 3 中实现自定义身份验证属性并将其与安全安全规则一起使用吗?
用于 uid 列表的 Firebase 存储自定义元数据安全规则