上传多个文件并查询 Firestore DB - ReactJS

2023-12-08

我读了很多这样的帖子如何将多个文件上传到 Firebase?之前关于这个问题,我尝试了不同的选择,但无法得到结果。 我正在使用 React Hook Form 来创建一个非常巨大的表单,现在我必须添加更多输入(以上传文件),并且需要帮助立即完成所有操作。

我的更新一个文件的代码:

  const onChangeFile = async (e: any) => {
    const file = e.target.files[0];
    const storageRef = app.storage().ref();
    const fileRef = storageRef.child(file.name);
    await fileRef.put(file);
    setFileUrl(await fileRef.getDownloadURL());
  };

  const onSubmit = async (data: any) => {
    
    try {
      await db
        .collection('listings')
        .doc()
        .set({ ...data, created: new Date(), uid: currentUser.uid, file: fileUrl });
      reset();

    } catch (error) {

    }
  };

因此,正如您所看到的,仅上传一个文件非常简单,但上传多个文件时情况就不同了。问题是,我的 onSubmit 中需要更多函数,它本身就是一个异步函数,因此限制了我可以在其中执行的操作量。 有人有一个简单的解决方法吗?


If e.target.files有多个文件,那么您可以将上传操作推送到数组,然后使用Promise.all():

const onChangeFile = async (e: any) => {
  const storageRef = app.storage().ref();
  const fileUploads = e.target.files.map(file => storageRef.child(file.name).put(file));
      
  const fileURLReqs = (await Promise.all(fileUploads)).map(f => f.ref.getDownloadURL())
  const fileUrls = await Promise.all(fileURLReqs)
  // setFileUrl(await fileRef.getDownloadURL());
};

fileUrls将是所有上传图像的 URL 数组onSubmit如果需要,可以上传到 Firestore。

我不确定您是否要为每个图像添加新文档,但如果是,请尝试以下操作:

// in onSubmit
const listingsCol = db.collection("listings")
const files = [] // get that fileUrls array from your state
const updates = files.map(file => listingsCol.add({...data, file}))
await Promise.all(updates)
// this will add a new document for each new file uploaded
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上传多个文件并查询 Firestore DB - ReactJS 的相关文章

随机推荐

  • C# 工具提示中的富文本

    我可以扩展 ToolTip 并创建自己的 RichToolTip 但我不明白如何处理每行或每字的格式 我可以添加用户可以单击的控件吗 或图像等 我碰到富文本框但这是用 C MFC 编写的 我想要 C 的东西或可以与 C 一起使用的东西 有什
  • 如何使用js读取所有url参数?

    有什么办法 如何读取 url 参数吗 www example com detail id 12 www example com detail 12 返回 12 我不知道参数是什么 我想全部归还 您可以使用window location hr
  • 在 java web start 应用程序中禁用字节码验证

    我有一个 java web start 应用程序 我需要从 jnlp 文件中禁用字节码验证 这可以通过设置 JAVAWS VM ARGS 轻松完成 noverify 或通过设置 X验证 无但是文档这里说web start不支持添加这些参数在
  • 如何在特定条件下做出承诺解决?

    我是 JavaScript 新手 我真的对 Promise 的文档感到困惑 我在这里有以下情况 我有很多用户 对于每个用户 我执行一个异步函数 在该函数中我对该用户进行一些计算 并将结果与 用户一起添加到数组中 根据我从文档中了解到的 我需
  • 让 IIS6 提供 JSON 文件(包括 POST、GET)?

    默认情况下 IIS6不提供 json 无通配符MIME type 因此会抛出 404 not find 错误 然后我添加一个新的 MIME 类型 json text plain or application x javascript or
  • 查找列中的重复项并使用替代颜色突出显示行背景色

    我想突出显示行的单元格颜色 文本位于 A 列中 当 A 列中的值相同并且想要时 G 具有相同的颜色 对所有行迭代相同的操作并应用替代颜色 还想将 2 个单元格中的字体颜色更改为红色 F 列和 当 F 列中有文本 文件位于 EMEA 服务器上
  • XSL 转换 - 未声明的命名空间前缀

    我有一个 XSL 文件 我想用它转换 XML 文件 该 XML 文件是通过重命名具有 safe 扩展名的原始文件而获得的 在这里你可以看到它的第一行
  • 测量 MPI 通信成本的工具 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在使用 MPI 我想测
  • 在 javascript 中,哪个更好 `var Obj = Obj || {}` 或 `if (Obj === '未定义' || typeof Obj !== 'object')`

    我想知道以下哪种方法更好 var Obj Obj or if Obj undefined typeof Obj object Obj 有人告诉我第二种方法更好 但我不知道为什么 请您向我解释一下各自的优点和缺点 非常感谢 第二种方法更具体
  • mailto 不适用于大型正文内容

    我正在尝试使用 mailto 函数在我的 Web 应用程序中获取 Outlook 窗口 使用下面的代码 a href Send mail a 如果bodyText小于周围1800人物 但它会截断超过 1800 个字符的数据 如果正文内容超过
  • PHP JPEG 函数不工作

    任何处理 JPEG 的 PHP 函数似乎都无法在我的服务器上运行 这段代码 创建一个空文件 使用 GIF 或 PNG 函数将创建一个包含预期文本 简单文本字符串 的图像 This im imagecreatefromjpeg t
  • 何时或为何在 Oracle 数据库中使用“SET DEFINE OFF”

    我正在观看 Oracle 中的脚本 我看到了一些我不认识的东西 REM INSERTING into database1 Users SET DEFINE OFF Insert into database1 Users id right v
  • PHP:可视化您的应用程序工作流程和功能与功能的关系

    我正在寻找一款可以帮助我可视化应用程序工作流程以及功能与功能关系的软件 我正在使用 codeigniter 而且我的应用程序每天都在变得越来越大 而且是我独自工作 我开始得精神分裂症了 今天我正在构建数据库模型 明天可能是查看js html
  • 如何从 Perl 发出 HTTP GET 请求?

    我正在尝试编写我的第一个 Perl 程序 如果您认为 Perl 对于手头的任务来说是一种糟糕的语言 请告诉我哪种语言可以更好地解决它 该程序测试给定机器和远程 Apache 服务器之间的连接 首先 程序从 Apache 服务器请求目录列表
  • $lookup的Foreign字段可以是嵌套文档的字段吗?

    lookup用于对同一数据库中的未分片集合执行左外连接 以从 连接 集合中过滤文档 以便在 Mongo 中进行处理 lookup from
  • 替换文件中间的文本

    I have txt文件 有几行 username1 123456789 etc etc etc etc username2 1234 etc etc etc etc username3 123456 etc etc etc etc use
  • Node js - 加密和解密文件

    我想在客户端加密文件并将其发送到服务器端 解密 但是当我使用内置的 Node js 时crypto我收到错误 客户端 js const crypto require crypto const cipher crypto createCiph
  • 为什么 read() 不能在 open() 函数中使用 'w+' 或 'r+' 模式

    当我使用带有 r 或 w 参数的打开时 它不想读取文本文件 内部文本文档 hello Python 代码示例 code with open file name r as o print o read output hello code wi
  • 安装时npm权限错误

    我正在尝试在我的服务器上安装 yeoman 但由于某种原因 我总是收到权限被拒绝的错误 npm install g yo root node bin yo gt root node lib node modules yo cli js gt
  • 上传多个文件并查询 Firestore DB - ReactJS

    我读了很多这样的帖子如何将多个文件上传到 Firebase 之前关于这个问题 我尝试了不同的选择 但无法得到结果 我正在使用 React Hook Form 来创建一个非常巨大的表单 现在我必须添加更多输入 以上传文件 并且需要帮助立即完成