首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将镜像从ReactJS上传到Firebase v9存储

将镜像从ReactJS上传到Firebase v9存储
EN

Stack Overflow用户
提问于 2021-11-21 00:36:06
回答 1查看 311关注 0票数 0

我遇到了一个问题。我想创建一个简单的图像上传输入,图像应该存储在Firebase存储中。我想我把一些v8和v9代码弄混了,但我也找不到正确的答案。

当我触发上传时,我得到这个错误消息:

代码语言:javascript
复制
TypeError: _firebase_firebase__WEBPACK_IMPORTED_MODULE_1__.storage.ref is not a function
代码语言:javascript
复制
  61 | 
  62 | const uploadFiles = () => {
  63 |   //
> 64 |   const uploadTask = storage.ref(`images/${img.name}`).put(img);
     | ^  65 |   uploadTask.on(
  66 |     "state_changed",
  67 |     (snapshot) => {

这是我正在运行的代码:

代码语言:javascript
复制
import React, { useState } from "react";
import { storage } from "../../firebase/firebase";
import { ActionBtn, Topbar, SubjectHead, CardList } from "../../components/styles";

const CreateImg = () => {
  const [img, setImg] = useState(null);
  const [progress, setProgress] = useState(0);

  const formHandler = (e) => {
    e.preventDefault();
    const file = e.target.files[0];
    setImg(file);
  };

  const uploadFiles = () => {
    const uploadTask = storage.ref(`images/${img.name}`).put(img);
    uploadTask.on(
      "state_changed",
      (snapshot) => {
        const prog = Math.round(
          (snapshot.bytesTransferred / snapshot.totalBytes) * 100
        );
        setProgress(prog);
      },
      (error) => console.log(error),
      () => {
        storage
          .ref("images")
          .child(img.name)
          .getDownloadURL()
          .then((url) => {
            console.log(url);
          });
      }
    );
  };

  return (
    <div>
      <Topbar>
        <SubjectHead>Create New CV</SubjectHead>
        <ActionBtn onClick={createCv}>Create CV</ActionBtn>
      </Topbar>
      <CardList type="form">
        <div>
          <div>
            <input
              type="file"
              accept=".jpg,.png,.jpeg"
              onChange={formHandler}
            />
            <button type="button" onClick={uploadFiles}>
              Upload
            </button>
            <h4>{progress}%</h4>
          </div>
      </CardList>
    </div>
  );
};

export default CreateImg;

下面是我的配置文件:

代码语言:javascript
复制
import { initializeApp } from "firebase/app";
import { getStorage } from "firebase/storage";

const firebaseConfig = {
  apiKey: "XXX",
  authDomain: "XXX",
  projectId: "XXX",
  storageBucket: "XXX",
  messagingSenderId: "XXX",
  appId: "XXX",
};

const app = initializeApp(firebaseConfig);
const storage = getStorage(app);

export { storage };

如果有人能帮我解决我的问题,我会非常高兴。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-21 00:47:06

您的导入:

代码语言:javascript
复制
import { getStorage, ref } from "firebase/storage";

然后创建ref:

代码语言:javascript
复制
const storage = getStorage();
const storageRef = ref(storage, `images/${img.name}`); //note that ref is not a function on storage -- it's a separately imported function

设置元数据:

代码语言:javascript
复制
const metadata = {
  contentType: 'image/jpeg'
};

启动并监控上传:

代码语言:javascript
复制
const uploadTask = uploadBytesResumable(storageRef, file, metadata);

uploadTask.on('state_changed',
  (snapshot) => {
    //etc

更多文档:https://firebase.google.com/docs/storage/web/upload-files#upload_files

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70050986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档