node.js - 为什么 formData 不能处理多个文件?

标签 node.js reactjs express multer form-data

我正在处理的 React 项目遇到问题:我正在尝试将多个图像上传到 Node Express API。我使用的是 formData 对象,并使用 append() 方法从组件状态附加表单字段。

在我使用 multer 的 Express 代码中,req.body 中的所有属性都存在,但 req.files 为空。

我更改了代码以使用 formData() 上传单个图像,并且它有效;问题似乎只有当我尝试使用 formData 对象处理多个文件时。我还使用常规形式(不是 react )进行了测试,这也有效!

我想知道当我将 formData 与多个文件的文件输入一起使用时是否缺少某些内容?

import React, { Component } from "react";
import axios from "axios";

class Form extends Component {
  constructor() {
    super();
    this.state = { images: {} };
  }

  onChangeImages = e => {
    this.setState({ images: e.target.files })
  };

  onSubmit = e => {
    e.preventDefault();

    const { images } = this.state;

    const formData = new FormData();

    formData.append("images", images);

    axios
      .post("/api/post/create", formData)
      .then(res => console.log(res.data))
      .catch(err => console.error(err));
  };

  render() {
    return (
      <form onSubmit={this.onSubmit}>

        <input
          onChange={this.onChangeImages}
          type="file"
          name="images"
          multiple
          accept="image/png, image/jpeg, image/jpg"
        />

        <br />
        <input type="submit" value="Send" />
      </form>
    );
  }
}

export default Form;
<小时/>

express 代码

const express = require('express');
const router = express.Router();
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });


router.post('/create', upload.array('images', 2), (req, res) => {
    console.log(req.files);
    console.log(req.body);
    res.status(200).json(req.body);
});


module.exports = router;

最佳答案

formData.append("images", images);

您需要依次附加每个文件。 FormData 不支持 FileList 对象。

for (let i = 0 ; i < images.length ; i++) {
    formData.append("images", images[i]);
}

关于node.js - 为什么 formData 不能处理多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269650/

相关文章:

javascript - 如何在 GraphQL 中进行相关突变?

javascript - React (16.4.1) setState() 使用react-select组件更新当前onChange事件后面的状态一onChange事件

node.js - Sailsjs中间件解析res.body

javascript - Node.js AWS S3 上传从不调用 End 函数

javascript - 在套接字客户端和服务器中访问时,socket.io-stream 也面临 404 问题

reactjs - 在 React 中使用 Leaflet js 插件

node.js - 使用 Node.js 和 Express 进行 reCAPTCHA

javascript - 如何在express.js中编写查找和更新查询?

javascript - 为什么多次运行 CoffeeScript 编译器会产生不同的输出?

javascript - 如何在React中动态生成导入文件的路径