javascript - 使用自定义名称属性在 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([]);
}
}
解决方案
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}`)
推荐阅读
- c - 输入字符串后C程序没有结束?
- amazon-web-services - 为什么 Cognito 注册显示 ??phone_number/email_en_US?? 作为用户名输入?
- javascript - 你如何从 json 渲染对象
- css - 使用填充将覆盖添加到 div
- vue.js - 如何在 Webpack 中启用源映射?
- google-cloud-run - 如何允许从 Google Cloud Run 到外部 MySql 实例的出站请求
- php - RSS 阅读器适用于 LocalHost 但不适用于共享主机
- c# - 尝试通过 mciSendString (MCIERR_CANNOT_LOAD_DRIVER) 播放 mp3 文件时出现问题
- r - 澄清函数内的列表子集
- java - 如何在适配器 onBind() 中比较 2 个具有不同元素集的列表?