如何在将多个图像上传到 Firebase 存储时显示进度条?

2024-02-19

我制作了将多个图像上传到存储并将链接保存到文档的功能,但我不知道如何监控进度。

const getURLS = async () => {
    const promises = [];
    images &&
        images.map((image) => {
            const storageRef = ref(storage, `images/${image?.file?.name + v4()}`);
            promises.push(
                uploadBytesResumable(storageRef, dataURLtoBlob(image.data_url)).then((uploadResult) => {
                    return getDownloadURL(uploadResult.ref);
                })
            );
        });

    const urls = await Promise.all(promises);

    try {
        await addDoc(collection(db, 'posts'), {
            message: data,
            createdAt: serverTimestamp(),
            createdBy: user,
            likes: [],
            comments: [],
            images: urls,
        }).then(() => {
            setData('');
            setImages([]);
        });
    } catch (err) {
        console.log(err);
    }
};

如何添加到这个功能? 我尝试了不同的方法但不起作用

谢谢帮助


The uploadBytesResumable() https://firebase.google.com/docs/reference/js/storage#uploadbytesresumable不返回承诺,而是返回UploadTask。您可以迭代所有选定的图像并单独跟踪它们的进度,如下所示:

function App() {
  const [images, setImages] = useState([])
  const [progress, setProgress] = useState([])

  const handleFileChange = (e) => {
    const files = e.target.files
    const newImages = []
    for (let i = 0; i < files.length; i++) {
      newImages.push(files[i])
    }
    setImages(newImages)
  }

  const handleUpload = async () => {
    for (let i = 0; i < images.length; i++) {
      const image = images[i]
      const storageRef = ref(storage, `images/${image.name}`)
      const uploadTask = uploadBytesResumable(storageRef, image)
      uploadTask.on('state_changed', (snapshot) => {
        const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100

        setProgress((prevProgress) => {
          const newProgress = [...prevProgress]
          newProgress[i] = progress.toFixed(2)
          return newProgress
        })
      }, (error) => {
        console.log(error)
      }, async () => {
        const imageUrl = await getDownloadURL(uploadTask.snapshot.ref)
        // Add to Firestore
      })
    }
  }

  return (
    <div className="App">
      <input type="file" multiple onChange={handleFileChange} />
      <button onClick={handleUpload}>Upload</button>
      {progress.map((progress, i) => (
        <div key={i}>{images[i].name}  {progress}%</div>
      ))}
    </div>
  )
}

每个文件都是单独上传的,因此您必须实现一些逻辑来将所有 URL 组合在一起并添加到 Firestore 文档中,就像您可以在所有上传进度(即中的所有项目)时调用函数一样progress数组变成100。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在将多个图像上传到 Firebase 存储时显示进度条? 的相关文章

  • JW Player - 视频可以在 Chrome 中播放,不能在 Firefox 或 IE 中播放

    See 工作链接 http www 888behindthescenes com test 在主页上我有两个视频 intro video 和 video container 在 chrome 下我没有问题 但在 firefox 和 IE 中
  • React 和 Leaflet 结合的好方法

    我正在开发一个将 React 和 Leaflet 结合起来的项目 但我必须说我在语义方面遇到了一些困难 由于大部分内容都是由 Leaflet 直接管理的 我不知道将 Leaflet 映射实例添加为 React 组件中的状态是否有意义 当涉及
  • 使用 JS 和 HTML 将当前 URL 插入链接

    所以 我已经阅读了类似的内容 但我仍然找不到更适合我正在做的事情的答案 我正在尝试使用 JS 获取当前页面 URL 并将其附加到社交媒体共享链接 如下所示 a href target blank 使用 Javascript 我成功地将当前
  • 找不到 firebase-messaging.js laravel

    大家好 我正在使用 firebase 制作一个用于推送通知的应用程序 这是我在 firebase 中的第一个项目 我遇到的问题是当我运行项目并单击它给我的登录按钮时的连接 已授予通知权限 但在此之后它返回一个错误 如下所示 获取脚本时收到错
  • 无法使用 Node.JS 将 null 值发送到 MySQL 数据库

    我正在尝试发送null使用 Node JS 到我的 MySQL 数据库 con query INSERT INTO Routes routeTrigger VALUES null title test function err result
  • 重置输入控件的边框颜色 (HTML/Javascript)

    有谁知道使用 javascript 修改输入控件后如何重置它的边框颜色 通过突出显示其中包含不正确或无效数据的字段等来进行验证非常有用 例如 改变边框 document getElementById myinput style border
  • 如何在 eclipse 中将 ReactJs 与 Spring MVC 集成

    我是新来的ReactJS 在我使用之前angularJS对于我的客户端 但现在我想将它与当前的应用程序集成SpringMVC 现在我想整合ReactJS作为客户端而不是angularJS 请帮我 如果有任何例子请帮忙 我在用eclipse
  • Internet Explorer 的数组indexOf 实现

    有很多关于如何将 indexOf 实现放入数组原型中以便它可以在 Internet Explorer 下工作的解决方案 但是我偶然发现了一个问题 到目前为止我所看到的任何地方似乎都没有解决这个问题 使用非常一致的MDC 的实施 https
  • 当容器有选择框时 jQuery mouseleave 触发问题

    我有两个容器 一个嵌套在另一个容器内 当我将鼠标悬停在父容器上时 我希望显示子容器 当我鼠标移出时 我希望子容器淡出 我遇到的问题是子容器有一个包含 选择框 的表单 当用户选择选择框时 会意外触发 mouseleave 事件 如何阻止选择框
  • 元素上的 jQuery touchSwipe 事件阻止滚动

    我有一些清单div元素垂直排序 使用jQuery TouchSwipe 插件 https github com mattbryson TouchSwipe Jquery Plugin添加了滑动事件来捕获左右滑动 想法是通过向左或向右滑动来从
  • JavaScript 中的自定义“确认”对话框?

    我一直在开发一个使用自定义 模式对话框 的 ASP net 项目 我在这里使用吓人引号 因为我知道 模式对话框 只是我的 html 文档中的一个 div 它被设置为出现在文档其余部分的 顶部 而不是真正意义上的模式对话框 在网站的许多部分
  • 如何从 dataurl 在服务器上创建图像文件

    我有一个 dataurl 格式的图像 例如 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAAD 2wBDAAMCAgMCAgMDAwMEAwME iiigAooooAKKKKACiiigAoo
  • 如何在 Android 设备(平板电脑和手机)方向更改时获得正确的窗口宽度

    我正在尝试使用 jquery 函数计算 Android 设备方向变化时的窗口宽度 window outerWidth true 此计算给出了两个方向变化的正确宽度iphone and ipad但在安卓中不行 如果我最初以横向模式或纵向模式加
  • 为什么 `BehaviorSubject` 不发出最后一个值

    The 关于BehaviorSubject的文档 http reactivex io documentation subject html声明它应该返回最后发出的值 无论我何时订阅 但它不会为我返回它 const ofObservable
  • 将回调函数与原型函数一起使用

    在执行回调时 我无法弄清楚如何传递对象方法而不是排序 通用原型 方法 function Client this name hello Client prototype apiCall function method params callb
  • 无法在 Reactjs 中暂停音频

    我关注了其他提出类似问题的帖子 但他们没有提供解决方案 我无法在 React Hook 中暂停音频 这是我的反应钩子 import React useState from react export default App props gt
  • 同步通用分析

    新的Universal Analytics重新引入了同步事件跟踪 https developers google com analytics devguides collection analyticsjs method reference
  • Rails 6 webpack 抛出“未捕获的引用错误:$未定义”

    大家好 我最近开始使用 ruby 2 6 5 开发 Rails 6 由于 Rails 6 引入了 webpack 所以我尝试使用 webpack 加载我的 js 文件 尽管我已经在 appliation js 中需要了 jquery 但我仍
  • angular-cli:Karma-Webpack 因“没有此类文件或目录”而失败

    我从Tour of Heroes使用标准 Angular systemjs 现在我正在使用angular client它在开发 生产模式下运行顺利 但我无法测试任何东西ng test 以下内容会被吐出 不仅适用于test ts但也为了pol
  • 获取不正确的日期,将时间戳转换为新日期

    我正在尝试将时间戳转换为日期 但得到的日期不正确 我正在开发一个使用 Angular 和 Typescript 的项目 我有这样的时间戳 1451642400 2016年1月1日 和1454320800 2016年2月1日 如果我编码 da

随机推荐

  • 深入理解MVC.net中的延迟加载和错误处理

    我试图对以下问题写出完整详细的答案 为什么 Dispose 有效 而不是 using var db new DataContext https stackoverflow com questions 23110719 why does di
  • 为什么 WordPress 被认为编程很差劲? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .NET 中的 ApplicationException 有何用途?

    为了引发异常 我通常使用内置异常类 例如ArgumentNullException and NotSupportedException 但是 有时我需要使用自定义异常 在这种情况下我会写 class SlippedOnABananaExce
  • 将所有内容都纳入范围内会影响 Angular 性能吗?

    我想知道是否有人对在模块内部使用 scope 与普通 JavaScript 对象有什么建议 例如 我在控制器中有一些变量 为了方便起见 我将它们附加到 scope 但它们可能只是控制器内的常规对象 没有任何功能差异 我的问题是 当 Angu
  • 颠覆和依赖

    我正在尝试为以下问题找到可行的策略 我们有几个依赖于我们框架的网络项目 所有内容都存储在我们的 SVN 中 并拥有自己的项目和所有必要的目录结构 主干 标签 分支 在一个示例中 我们有项目 webprj01 和 webprj02 并且我们有
  • 如何将 routerLinkActive 与空 routerLink 一起使用

    我有以下选项卡栏链接 第一个应该是空的
  • 如何使用 POCO 通过 HTTP 基本身份验证进行 HTTP Post?

    我正在尝试使用 POCO 进行 HTTP 基本身份验证 明文用户名和密码 的 HTTP Post 我找到了一个 Get 的示例并尝试修改它 但作为一个菜鸟 我认为我已经破坏了它的实用性 有人知道怎么做吗 是的 我已经看到了另一个关于此的问题
  • 使用 ctest/cmake 测试非零退出状态

    感兴趣的应用程序是一个编译器 当它在源代码中遇到错误时 它会返回非零退出代码 编译器的单元测试由故意触发错误的小片段组成 用于添加测试的函数是 function add compiler test test name options add
  • 检测 AngularJS 中自定义过滤器何时完成[重复]

    这个问题在这里已经有答案了 我有一个自定义过滤器函数 我正在调用 ng repeat 指令 div app title div 这显然会影响 appList 中每个应用程序的 assetFilter 函数 过滤完成后 我想运行另一个函数 如
  • Spring AOP中代理的使用

    我正在读一本书 其中谈到启用AspectJSpring AOP 的支持 下面是书中的一段话 要在 Spring IoC 容器中启用 AspectJ 注释支持 您只需定义一个空的 bean 配置文件中的 XML 元素 aop aspectj
  • Azure 表存储 API 是否缓存结果?

    当我对 Azure 表存储多次运行相同的查询时 它是否使用缓存并加速后续查询 换句话说 它是否缓存 HTTP 响应 Azure存储肯定使用缓存 http www scribd com doc 73458371 Windows Azure S
  • 单击 web.py python 中的按钮时下载/导出 csv 文件

    我正在使用Pythonweb py构建小型网络应用程序的框架 它由一个 Home page以 url 作为输入 Reads anchor text and anchor tags从中 将其写入 csv 文件并下载 当我们点击 a 时 就会发
  • Python range() 上的“in”运算符时间复杂度

    我有以下功能 def foo length num return num in range length 这个函数的时间复杂度是多少 注意到range 在Python 3上创建一个Range对象 这个函数的时间复杂度是O 1 还是O N 我
  • wxPython,更改StyledTextCtrl的背景颜色

    我尝试过 但什么也没发生 self txt SetBackgroundColour 255 0 0 正如标题中所述 我正在尝试更改 StyledTextCtrl 的背景颜色 有谁知道可以使用的方法吗 我检查了 API 文档 但似乎找不到 h
  • 如何从 MATLAB 打印出一大堆符号表以形成十字绣图?

    在这个网站上 http www picturecraftwork com 可以从图像创建针迹图表 我正在尝试在 MATLAB 中执行此操作 我已经使用图像处理工具箱实现了所有内容 减少颜色数量 映射到可用纱线颜色的颜色空间 我已经完成了所有
  • DB 记录属性的整数与字符

    假设我有一张包含房地产列表的表格 每个列表都可以是 出售 或 出租 因此 我可以将 出售 映射到 0 将 出租 映射到 1 并将其作为 INT 存储在数据库中 但是 如果我将其存储为 CHAR 类型的字段中的 销售 租赁 则会更具描述性 或
  • 如何在 Python Pandas 中使用循环更改数据帧? [复制]

    这个问题在这里已经有答案了 我有 N 个数据帧 范围从 L1 Ln 我想修改它们以保留与特定条件相关的行 我运行了以下循环 for df in L1 Ln df df ix df Sector Services 然而 当我调出每个数据框时
  • 如何在 Xamarin.Android 中注册我自己的应用程序子类?

    I have public class MyApp Application 在 Java 中 我将在清单中添加一行并向其传递应用程序的命名空间和名称
  • jQuery 只允许一个版本

    我有一个包含 jquery 的第三方脚本 这会导致事情中断 我使用的是 1 6 版本 外部脚本使用的是旧版本 如何强制只加载一个版本的 jquery 并且它是我在页面上的版本而不是外部加载的版本 这实际上很容易做到 使用 jquery no
  • 如何在将多个图像上传到 Firebase 存储时显示进度条?

    我制作了将多个图像上传到存储并将链接保存到文档的功能 但我不知道如何监控进度 const getURLS async gt const promises images images map image gt const storageRef