首页 > 解决方案 > 使用自定义名称属性在 Firebase 中存储视频 blob,返回未定义

问题描述

问题是我的所有集合文档都引用同一个 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([]);
        }
    }

标签: javascriptreactjsfirebasegoogle-cloud-firestorefirebase-storage

解决方案


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}`)

推荐阅读