使用自定义名称属性在 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 存储上传错误:无法读取未定义的属性“子”

带有 firebase nuxt 模块的 Firebase 存储在删除文件后无法读取未定义的属性“删除”

可以在 Firebase 3 中实现自定义身份验证属性并将其与安全安全规则一起使用吗?

用于 uid 列表的 Firebase 存储自定义元数据安全规则

TypeError:无法读取未定义 Firebase 存储反应的属性“参考”

使用自定义核心数据持久存储通过 Web 服务获取数据?