如何使用reactjs将图像上传到Firebase web v9

2024-01-06

我在使用 Web 版本 9 将图像上传到 Firebase 时遇到问题。 我正在关注他正在其中构建 Facebook 克隆的平台之一的教程。我被困在 firebase 上传图像和文件的这一部分...... 我检查了 firebase 的文档,并尝试找出应该更改的内容,但我无法做到。 我想要的是将 firebase 代码从旧版本转换为最新的 web V9。 这是我的代码,但在以前的版本中:

import { useSession } from 'next-auth/client';
import { useRef, useState } from 'react';
import { db, storage } from '../firebase';
import firebase from 'firebase';

function InputBox() {
    const [session] = useSession();
    const inputRef = useRef(null);
    const filepickerRef = useRef(null);
    const[imageToPost, setImageToPost] = useState(null);

    const sendPost = (e) => {
        e.preventDefault();

        if (!inputRef.current.value) return;

        db.collection('posts').add({
            message: inputRef.current.value,
            name: session.user.name,
            email: session.user.email,
            image: session.user.image,
            timestamp: firebase.firestore.FieldValue.serverTimestamp()
        }).then(doc => {
            if (imageToPost) {
                const uploadTask = storage.ref(`posts/${doc.id}`).putString(imageToPost, 'data_url')

                removeImage();

                uploadTask.on('state_change', null, error => console.error(error), 
                () => {
                    //When the upload completes
                    storage.ref(`posts`).child(doc.id).getDownloadURL().then(url => {
                        db.collection('posts').doc(doc.id).set({
                            postImage: url
                        },
                        { merge: true}
                        );
                    });
                });
            }
        });

        inputRef.current.value = "";
    };

    const addImageToPost = (e) => {
        const reader = new FileReader();
        if (e.target.files[0]) {
            reader.readAsDataURL(e.target.files[0]);
        }
        reader.onload = (readerEvent) => {
            setImageToPost(readerEvent.target.result);
        };
    };

    const removeImage = () => {
        setImageToPost(null);
    };

    return (here is my jsx)


如果你的 firebaseConfig 没问题,那么这应该可以工作!

import { setDoc, doc } from "firebase/firestore";
import { ref, uploadString, getDownloadURL, getStorage  } from "firebase/storage";

            if (imageToPost) {
                const storage = getStorage();
                const storageRef = ref(storage, `posts/${docum.id}`);
                const uploadTask = uploadString(storageRef, imageToPost, 'data_url');

                uploadTask.on('state_changed', null,
                (error) => {
                  alert(error);
                },
                () => {
                  getDownloadURL(uploadTask.snapshot.ref)
                  .then((URL) => {
                     setDoc(doc(db, "posts", docum.id), { postImage:URL }, { merge: true});
                  });
                }
              )
              removeImage();
            };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用reactjs将图像上传到Firebase web v9 的相关文章

  • Firebase 存储 URL 不断随着新令牌的变化而变化

    我正在尝试使用 firebase 数据库和存储构建社交媒体应用程序 以下是预期的流程 用户上传个人资料图片 该图片存储在当前用户文件夹中的 Firebase 存储中 并且 URL 存储在 Firebase 数据库中以便快速访问 工作正常 用
  • Firebase获取孩子ID swift ios

    我的 Firebase 看起来像这样 贝娄Active Orders看来childs根据他们的不同有不同的名字UID 用户身份 这是我的代码 用于获取孩子的 ID 无论孩子的名字是什么 但它似乎根本不起作用 获得的正确方法是什么child
  • Material UI Drawer设置背景色

    如何简单设置Material UI的背景色Drawer 尝试过这个 但不起作用
  • 如何使用 Material UI 在应用栏下方打开下拉菜单?

    我是 Material UI 的新手 刚刚开始摆弄他们的带有菜单示例的应用栏 https mui com material ui react app bar app bar with menu 切换菜单下拉菜单时 它会在应用栏本身上方打开
  • 如何在 Firebase 上随机获取相同的数据?

    我有用户表和这段代码 getOnline 代码和连接按钮 var onlineStatus firebase database ref users firebase auth currentUser uid online onlineSta
  • React-Native 中的导航抽屉

    我是反应原生的新手 不介意我问一个基本问题 我想知道 实现抽屉式导航的分步过程是什么 推荐链接这个链接 https github com react native community react native side menu usage
  • 反应超出最大调用堆栈大小

    如果用户未登录 我尝试将用户重定向到 TrapPage 这是我的代码 function requireAuth nextState replace if auth loggedIn replace pathname trap export
  • Material UI + Nextjs:抽屉

    我在 React Nextjs 项目中遇到了 Material UI Drawer 的实现问题 问题是 当我在导航器中重新加载页面时 抽屉和应用栏的样式崩溃 当我重新加载服务器时 这种情况没有发生 仅在页面重新加载时发生 目前我不知道我必须
  • 使用 OneSignal/Firebase 从 iOS 设备发送推送通知

    我正在开发一个应用程序 并试图找出当不同用户执行特定操作时如何通知特定用户 我试图避免设置自己的后端服务器 因为我相信我想做的事情可以通过 OneSignal Firebase 来完成 我还没有尝试过 但我认为每个用户都可以获得自己的 On
  • 使用添加“title”属性换行符 到 JSX 元素

    我知道我可以在 HTML 中添加换行符title属性使用 10 但 React 避免了这一点 例如 这是一个 React 组件 其中包含一个标准的 未由 React 处理的组件title包含换行符的属性 并且可以在浏览器中看到效果 但是如果
  • 如何将 Android 应用程序添加到已在 iOS 应用程序中使用的现有 Firebase 项目?

    我一直在我的 iOS 应用程序中使用 Firebase 项目 我现在想开始为 Android 应用程序使用相同的 Firebase 项目及其所有数据库和存储 在您的应用程序下Overview菜单 你应该按添加另一个应用程序并选择Androi
  • 使用react redux获取删除请求方法不删除

    我正在尝试使用 fetch 删除请求方法来使用 React redux 删除本地主机服务器中的项目 调用方法 deleteItem e e preventDefault const id this props id this props d
  • 无效的挂钩调用。钩子只能在函数组件体内调用

    我想使用 React 在表中显示一些记录 但出现此错误 无效的挂钩调用 钩子只能在 a 的主体内部调用 功能组件 以下情况之一可能会发生这种情况 原因 您的 React 和渲染器版本可能不匹配 例如 React DOM 你可能违反了 Hoo
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • Ant design Tabs onClick 函数

    我使用 Ant 设计创建了选项卡 在第二个选项卡中 当我单击我想要触发的按钮或更改为第一个选项卡时 有一个按钮 这是我的代码
  • 为什么无论状态是对象还是字符串,React 重新渲染的方式都不同?

    下面的反应示例 userProfile状态是一个object 第一次渲染 状态是 第二次渲染 状态是res data gt 无限重新渲染 If userProfile更改为string e g useState with setUserPr
  • Jest - 测试使用react-router的组件

    我正在测试一个呈现具有以下 contextTypes 的子组件的组件 Component contextTypes router PropTypes object isRequired 我对笑话完全陌生 但来自摩卡 酶我从未遇到过这个问题
  • Firebase 身份验证中是否需要 SMS Retriever API 才能进行 otp 自动填充?

    我在用Firebase auth api验证用户电话号码 目前 就我而言 我有一个屏幕 用户在其中输入电话号码 并在第二个屏幕上输入密码 根据文档firebase大多数时候自动检索 OTP 并启动验证过程 所以我的问题是它已经实现了SMS
  • 从 Context Provider 重定向 React Router

    我是 React Router 的新手 并尝试使用新的 Conext API 从提供程序内部进行重定向 基本上我的提供者看起来像这样 AuthContext js class AuthProvider extends React Compo
  • Firebase 数据库规则时间戳问题

    自 2017 年 10 月 29 日时间转移以来 我在使用 Firebase 产品进行开发时遇到了一些非常奇怪的行为 我正在使用 Ionic 3 开发一个混合应用程序 当我在浏览器 移动模拟设备 中进行开发和测试时 一切正常 一旦我切换到我

随机推荐

  • 使用 Chart.js 根据时间字符串绘制单圈时间

    我正在尝试使用 Chart js 绘制一个折线图 显示一系列单圈时间的趋势 但我正在努力将时间字符串解析为正确的格式 我有一个带有这样的单圈持续时间 分钟 秒 毫秒 的时间数组 我将其用作数据集 const times 1 32 599 1
  • Target Boost:: 已导入位置 + 链接错误

    我正在使用 Homebrew 在 MacOS Mojave 上安装 LLVM Boost 和 CMake 将我的 LLVM 升级到版本 9 0 0 并将 Boost 升级到 1 71 0 后 CMake v3 15 3 开始抱怨各种库已经具
  • C++ 整数->std::字符串转换。功能简单?

    问题 我有一个整数 该整数需要转换为 stl string 类型 过去我用过stringstream进行转换 这有点麻烦 我知道 C 方法是做一个sprintf 但我更愿意做一个类型安全 呃 的 C 方法 有一个更好的方法吗 这是我过去使用
  • 使用并行集合就地转换数组

    当拥有一组对象时 通常需要 例如出于性能原因 更新 替换 某些对象 例如 如果您有一个整数数组 您可能希望将负整数替换为正整数 Faster for primitives var i 0 while i lt a length if a i
  • 将相等运算符与 boost::Optional 一起使用

    我试图为另一个命名空间中定义的类型 T 定义一个相等运算符 然后在optional
  • Asp.Net UpdatePanel错误

    我在我的 aspx 页面中使用 UpdatePanel 并使用 DropDownListonselectedindexchanged方法 第一次运行时onselectedindexchanged方法正在发挥作用 但是再次更改选择它会返回这样
  • 用于嵌入式 Tomcat 8.5 的 Tomcat Maven 插件

    我正在运行 Spring Web 应用程序 但无法使用 Tomcat 8 5 在最新的 Eclipse 中执行嵌入式 tomcatTomcat 7 Maven 插件 http tomcat apache org maven plugin t
  • ASP.Net Core:如何更新(更改/添加/删除)嵌套项对象(一对多关系)?

    我有一个带有 MSCustomers 和 MSLocations 的 Net 5 x 项目 MSLocations 与 MSCustomers 之间存在多对一的关系 我的 编辑 页面正确显示 MSCustomer 记录和相应的 MSLoca
  • 使用软键盘时不会调用 onKeyDown

    我的 Activity 的 xml 代码是
  • 如何使用 Mercurial 自动合并 2 个头

    我们刚刚从 subversion 切换到 Mercurial 有一件事比预期花费了更多的时间 合并头 我们喜欢这样一个事实 它使合并独立于 2 个提交 与 subversion 相比 但我们最终会定期合并 2 个头以进行不相关的更改 简单的
  • 隧道和冒泡事件何时在 WPF 中有用?

    我了解冒泡和隧道的工作原理 但是 我对使用它们感到困惑 原因如下 我想处理鼠标点击事件 要使其起泡 有MouseDown并且 为了隧道化 有PreviewMouseDown 然而 MouseDown并不一定意味着用户单击了该控件 可能是用户
  • 如何使用 Objective C iOS 删除 iPhone X 中表格视图顶部的多余空间

    我已经用 Objective C 开发了一个应用程序 它在所有 iPhone 手机上运行良好 但是当我在 iPhone X 模拟器中运行这个应用程序时 我不知道如何在 UITableView 的顶部获得一些额外的空间 大约 20 22 像素
  • 行高属性:正常+4px

    我想要normal行高加上 4px 我努力了 line height normal 4px 但这行不通 Note 我不想使用百分比进行近似 为什么不直接去掉 Chrome 的小焦点眩光呢 使用CSS属性outline none http j
  • 在管道中发送 EOF 而不关闭它

    我正在编写一个使用 GnuPlot 来绘制数据的应用程序 我决定使用 二进制 格式 而不是使用文本格式通过管道来通信两个程序 由于 vprintf 和传递的数据量很大 速度很慢 问题是 在二进制格式中 GnuPlot 期望 EOF Ctrl
  • Laravel 5.2:csrf 令牌不起作用

    您好 为什么我的 csrf 令牌值为 null 当我不使用令牌时 我没有 TokenMismatchException 我该如何解决它 我更深入地挖掘 发现会话没有在 SessionServiceProvider 中注册 是否需要启用某些功
  • 编写交叉兼容的 Python 2/3:__future__、6 和 future.utils 之间的区别?

    我正在编写交叉兼容的 Python 2 和 3 代码 并从中得到一些帮助备忘单 http python future org compatible idioms html 我注意到有不同的包和模块可以帮助做到这一点 future包 例如fu
  • SwiftUI 中模态表可以有导航栏吗?

    我在代码中通过导航栏按钮呈现模式表 struct MainPage View State var isModalSheetShown Bool false var body some View VStack navigationBarIte
  • 获取 StartDate 和 EndDate 之间的日期

    我有日期数组 我只需要获取两个不同日期 开始日期和结束日期 之间的日期 任何人都可以帮我解决这个问题吗 提前致谢 假设你有startDate and endDate类型的实例NSDate你可以 NSPredicate predicate N
  • 在 Nodejs 中防止开放重定向攻击安全吗?

    我正在尝试防止开放重定向攻击 请查看下面的代码并检查安全性 var require url http example com login redirect http example com dashboard app route login
  • 如何使用reactjs将图像上传到Firebase web v9

    我在使用 Web 版本 9 将图像上传到 Firebase 时遇到问题 我正在关注他正在其中构建 Facebook 克隆的平台之一的教程 我被困在 firebase 上传图像和文件的这一部分 我检查了 firebase 的文档 并尝试找出应