📜  React.js 中的文件上传

📅  最后修改于: 2022-05-13 01:56:21.652000             🧑  作者: Mango

React.js 中的文件上传

对于任何设想构建应用程序的开发人员来说,上传图像是他们必须考虑的主要组成部分。这是创建完整应用程序时的基本要求。文件上传是指来自客户端计算机的用户想要将文件上传到服务器。例如,用户可以在 Facebook、Instagram 上上传图片、视频等。与任何编程问题一样,有很多方法可以实现这一结果。本文介绍了一种简单的方法来实现使用 React 上传单个文件的方法。
上传图片的过程大致可以分为两个步骤:

  • 选择文件(用户输入):为了让用户能够选择文件,第一步是将标签添加到我们的 App 组件中。该标签的类型属性应设置为“文件”。现在,我们需要一个事件处理程序来监听对文件所做的任何更改。每当用户选择新文件并更新状态时,都会触发此事件处理程序。
  • 向服务器发送请求:存储所选文件(处于状态)后,我们现在需要将其发送到服务器。为此,我们可以使用 fetch 或 Axios。 (在这段代码中,我们使用 Axios 一个基于 Promise 的 HTTP 客户端,用于浏览器和 NodeJS)。该文件被发送到包装在 FormData 对象中的服务。
    安装 Axios:
    • 运行以下命令。
npm install axios --save

打开你的 react 项目目录并编辑 src 文件夹中的App.js文件:

src App.js:

javascript
import axios from 'axios';
 
import React,{Component} from 'react';
 
class App extends Component {
  
    state = {
 
      // Initially, no file is selected
      selectedFile: null
    };
    
    // On file select (from the pop up)
    onFileChange = event => {
    
      // Update the state
      this.setState({ selectedFile: event.target.files[0] });
    
    };
    
    // On file upload (click the upload button)
    onFileUpload = () => {
    
      // Create an object of formData
      const formData = new FormData();
    
      // Update the formData object
      formData.append(
        "myFile",
        this.state.selectedFile,
        this.state.selectedFile.name
      );
    
      // Details of the uploaded file
      console.log(this.state.selectedFile);
    
      // Request made to the backend api
      // Send formData object
      axios.post("api/uploadfile", formData);
    };
    
    // File content to be displayed after
    // file upload is complete
    fileData = () => {
    
      if (this.state.selectedFile) {
         
        return (
          
            

File Details:

             

File Name: {this.state.selectedFile.name}

               

File Type: {this.state.selectedFile.type}

               

              Last Modified:{" "}               {this.state.selectedFile.lastModifiedDate.toDateString()}             

            
        );       } else {         return (           
            
            

Choose before Pressing the Upload button

          
        );       }     };          render() {            return (         
            

              GeeksforGeeks             

            

              File Upload using React!             

            
                                              
          {this.fileData()}         
      );     }   }     export default App;


输出: