如何在ReactJS中使用axios将一个或多个文件发送到API

如何在ReactJS中使用axios将一个或多个文件发送到API

ReactJS是一个前端库,我们可以使用它来创建网页。在实时应用程序中显示数据并由后端管理是很自然的。所以,每当React需要在网页上显示数据时,它通过进行API调用从后端获取数据。

有时,我们可能需要向后端发送数据以将其存储在数据库中。例如,我们已经获取了用户的个人资料图片,并需要将其发送到后端以将其存储在数据库中。

在许多情况下,我们需要使用ReactJs向后端发送单个或多个文件。例如,一些抄袭检测工具允许上传多个文件以检查内容的抄袭。

本教程将使用axios在ReactJs中向后端发送单个或多个文件。

创建应用程序和发送多个文件的步骤

在这里,我们将创建两个应用程序。一个是React应用程序,我们将用它来进行前端部分,另一个是Node应用程序,我们将用作后端。

创建React应用程序

  • 步骤1 - 使用以下命令在项目目录中创建一个react应用程序。
npx create-react-app app-name

在上面的命令中,app-name是应用的名称,用户可以用任何名称进行替换。

  • 步骤2 - 现在,使用以下命令在React应用中安装axios npm包。
npm i axios
  • 步骤3 - 创建一个可以处理多个文件的文件输入。另外,创建一个提交按钮,当用户点击它时,应调用一个函数,该函数使用多个文件向后端发起POST请求。

  • 步骤4 - 创建一个uploadMultipleFiles()函数,该函数可以使用axios进行POST请求。

uploadMultipleFiles() {
   axios({
      url: "http://localhost:8080/addFiles", 
      method: "POST",
      data: { allFiles: files }, 
   })
}

在上面的代码中,用户可以观察到我们使用了后端的端点和“POST”作为方法的值,以向后端发起POST请求。此外,在发起请求时,我们传递了数据对象,我们可以在后端接收并操作文件。

  • 步骤5 - 接下来,用户可以将以下代码添加到应用程序的 App.js 文件中。
import React from "react";
import axios from "axios";

class App extends React.Component {
   state = {
      allFiles: [],
   };

   changeFileInput(event) {
      // using the setState method to set uploaded files to allFiles in the state object
      let files = event.target.files;
      this.setState({ allFiles: files });
   }

   uploadMultipleFiles() {
      // get files from the state
      let uploadedFiles = this.state.allFiles;
      let files = [];
      // get the name of the files and push them to the files array
      //users can also get files content, convert it to blob format and send it to the backend
      for (let the file of uploadedFiles) {
         files.push({ name: file.name });
      }
      axios({
         url: "http://localhost:8080/addFiles", // URL to make request
         method: "POST", // post method to send data
         data: { allFiles: files }, // attaching the files
      })
      .then((res) => {
         // handle response
         console.log(res);
      })
      .catch((err) => {
         // handle errors
         console.error(err);
      });
   }

   render() {
      return (
         <div>
            <h2>
               {" "}
               Using the <i> axios </i> to upload multiple files on NodeJs server.{" "}
            </h2>
            <input
               Type = "file"
               multiple // adding multiple attributes to allow users to upload multiple files.
               onChange = {(event) => this.changeFileInput(event)}
            />
            <button onClick = {() => this.uploadMultipleFiles()}>
               Send Multiple Files to the server
            </button>
         </div>
      );
   }
}
export default App;

在上面的代码中,我们创建了文件输入项。每当用户上传多个文件时,我们调用changeFileInput()函数,该函数将所有文件设置为state对象中的allFiles变量。

当用户点击按钮时,它会调用uploadMultipleFiles()函数,该函数从state中获取所有文件并创建文件对象数组。然而,我们只在对象中添加了文件名,但用户可以访问文件内容,将其转换为blob对象,并添加到文件对象中。

之后,我们使用axios发送post请求到后端,并将该对象作为数据值传递。

  • 步骤6 - 作为最后一步,用户需要使用以下命令运行应用程序。
npm start

创建Node应用程序

  • 步骤1 - 在终端中输入以下命令创建一个Node应用程序。
node init -y
  • 步骤2 - 现在,在Node项目中安装所需的依赖项。用户应在终端中输入以下命令以安装应用程序的依赖项。
npm i express cors body-parser

我们将使用express来创建一个服务器,cors作为一个中间件,允许我们从前端向后端发送post请求。body-parser将解析我们在前端发起post请求时传递的数据。

  • 步骤3 - 在Node应用程序中,使用下面的代码设置服务器。
var express = require("express");
var app = express();
app.listen(8080, function () {
   console.log("server started successfully");
});
  • 步骤4 – 现在,在‘/addFiles’路由上处理POST请求。在回调函数中,使用以下代码从请求体中获取文件。
app.post("/addFiles", function (req, res) {
   // get files from the body here
});
  • 步骤5 - 用户可以将下面的完整代码添加到 server.js 文件中。如果项目中不存在 server.js 文件,用户可以创建一个以 server.js 命名的文件。
// Importing the required and installed modules
var express = require("express");
var cors = require("cors");
var app = express();
const bodyParser = require("body-parser");
// using middleware with app
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// allow users to make a post request.
app.post("/addFiles", function (req, res) {
   let allFiles = req.body;
   console.log(allFiles);
});

// Allowing the app to listen on port 8080
app.listen(8080, function () {
   console.log("server started successfully");
});

在上面的代码中,我们导入了所需的库。之后,在Node应用程序中设置了Express服务器。此外,我们使用了body-parse来从请求体中提取数据,并在Express应用程序中使用了cors作为中间件。

然后,我们创建了处理文件并将所有文件打印在控制台上的端点。

  • 步骤6 - 我们已经准备好处理Node应用程序上的POST请求。用户需要在终端上运行以下命令来运行Node应用程序。
node server.js

输出

现在,用户可以在不同的端口上同时运行这两个应用程序。用户可以在下面的图片中看到react应用程序的输出。

如何在ReactJS中使用axios将一个或多个文件发送到API

当我们在网页上上传多个文件时,节点应用程序会在控制台打印出所有文件名,如下图所示。

如何在ReactJS中使用axios将一个或多个文件发送到API

我们学会了使用axios的post请求向后端发送多个文件。然而,在本教程中,我们只发送了文件名,但用户也可以发送文件内容和更新日期等。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程