javascript - 无法从React上传图像以使用Multer表达API

标签 javascript node.js reactjs express multer

我想将图像从我的 React 应用程序上传到我的 Express API。 我在 vainla js 中做了类似的东西,它可以使用相同的端点,但在 React 项目中不起作用。 我创建了一个像这样的 react 组件:

import React, { useState } from "react";
import BackupIcon from "@material-ui/icons/Backup";
import url from "../url";
import Preview from "./Preview";

const AdaugaImg = props => {
  const [file, setFile] = useState(null);
  const [ales, setAles] = useState(false);
  const [imgUrl, setImgUrl] = useState("");

  const modificare = e => {
    //console.log(e.target.value);
    setFile(e.target.files[0]);
    setAles(true);

    const urlImg = URL.createObjectURL(e.target.files[0]);
    //console.log(urlImg);
    //reader.onloadend = e => setImgUrl(reader.result);
    setImgUrl(urlImg);
  };

  const upload = async e => {
    e.preventDefault();
    setAles(false);
    console.log("incarcare");
    console.log(file);
    try {
      const data = new FormData();
      data.append("img", file);
      const res = await fetch(`${url}/add`, {
        method: "POST",
        data: data
      });
      console.log(await res.json());
    } catch (error) {
      console.log(error);
    }
  };
  const closePreview = () => setAles(false);
  const preview = ales ? (
    <Preview imgUrl={imgUrl} closePreview={closePreview} />
  ) : null;
  return (
    <div className="upload">
      {preview}
      <form method="POST" onSubmit={upload}>
        <input
          type="file"
          name="img"
          id="poza"
          style={{ width: 0.1, height: 0.1 }}
          onChange={modificare}
        />
        {!ales ? (
          <label for="poza" className="upload-label">
            <p>Selecteaza o poza</p>
          </label>
        ) : null}
        <button className="upload-btn" type="submit">
          <BackupIcon />
          <p>Incarca poza</p>
        </button>
      </form>
    </div>
  );
};
export default AdaugaImg;

他们是我写的代码。对于使用 multer 的 api

const router = require("express").Router();
const multer = require("multer");
const storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, "img-biserici/");
  },
  filename: function(req, file, cb) {
    cb(null, file.fieldname + "_" + Date.now() + "_.jpg");
  }
});

const upload = multer({
  storage: storage
});

router.post("/add", upload.array("img", 1), (req, res) => {
  console.log(req.files[0]);
  res.json({ ok: true });
});

当我在控制台中上传图像时,它向我显示此错误:TypeError: Cannot read property '0' of undefined 。我错过了什么?如何修复此问题?

最佳答案

header 中缺少内容类型。

  const res = await fetch(`${url}/add`, {
    method: "POST",
    data: data,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });

关于javascript - 无法从React上传图像以使用Multer表达API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60228814/

相关文章:

javascript - 在具有相同类的 div 内循环

javascript - 在对象的对象中访问值

mysql - 找不到模块 'sequelize/types'

javascript - Material-UI - 如何更改深色主题的默认颜色?

javascript - 为什么react js中类函数方法不被调用?

javascript - 按钮背景的挖空文本

javascript - 从子级到父级的 React hook 回调

javascript - 使用 Javascript 对无序列表进行排序

node.js - Electron 错误错误: Cannot find module 'mysql' Require stack:

reactjs - 无法使用 universal-cookie 从我的 React 应用程序访问带有 HttpOnly 标志的 cookie