React-Beispiel, das den Fortschritt des Datei-Uploads zeigt

React-Beispiel, das den Fortschritt des Datei-Uploads zeigt

Axios ist eine auf Versprechen basierende HTTP-Bibliothek, die in Browsern und node.js verwendet werden kann.
Wenn Sie beim Verwenden des React- oder Vue-Frameworks Datei-Uploads überwachen müssen, können Sie onUploadProgress in Axios verwenden.

React-Demo zur Anzeige des Datei-Uploadfortschritts

Installieren Sie die React-Anwendung schnell auf dem Frontend

Stellen Sie sicher, dass Sie eine Node-Umgebung haben npx create-react-app my-app //Erstellen Sie die Datei my-app im aktuellen Ordner cd my-app //Geben Sie das Verzeichnis ein npm install antd //Installieren Sie die Antd-UI-Komponente npm run start //Starten Sie das Projekt

src->App.js

importiere React von „react“;
importiere „antd/dist/antd.css“;
importiere { Upload, Nachricht, Button, Fortschritt } von 'antd';
importiere { UploadOutlined } von '@ant-design/icons';

Axios von „Axios“ importieren
axios.defaults.withCredentials = wahr

Klasse App erweitert React.Component {
  Konstruktor(Requisiten) {
    super(Requisiten)
    dieser.Zustand = {
      Dateiliste: [],
      Hochladen: falsch,
      Dateigröße: 0,
      Baifenbi: 0
    }
  }
  //Wenn sich der Dateiupload ändert, configs = {
    Header: { 'Inhaltstyp': 'multipart/form-data' },
    mit Anmeldeinformationen: true,
    onUploadProgress: (Fortschritt) => {
      console.log(Fortschritt);
      let { geladen } = Fortschritt
      let { Dateigröße } = dieser.Zustand
      console.log(geladen, Dateigröße);
      let baifenbi = (geladen / Dateigröße * 100).toFixed(2)
      dies.setState({
        Abonnieren
      })
    }
  }
  //Klicken zum Hochladen handleUpload = () => {
    const { Dateiliste } = dieser.Zustand;
    const formData = new FormData();
    fileList.forEach(Datei => {
      formData.append('files[]', Datei);
    });
    dies.setState({
      hochladen: wahr,
    });
    //Lokalen Dienst anfordern axios.post("http://127.0.0.1:5000/upload", formData, this.configs).then(res => {
      dies.setState({
        Preis: 100,
        Hochladen: falsch,
        Dateiliste: []
      })
    }).schließlich(log => {
      konsole.log(log);
    })
  }
  bei Änderung = (Info) => {
    if (info.file.status !== 'Hochladen') {
      dies.setState({
        Dateigröße: info.Dateigröße,
        Baifenbi: 0
      })
    }
    wenn (info.file.status === 'erledigt') {
      message.success(`Datei ${info.file.name} erfolgreich hochgeladen`);
    } sonst wenn (info.file.status === 'Fehler') {
      message.error(`Hochladen der Datei ${info.file.name} fehlgeschlagen.`);
    }
  }


  rendern() {
    const { Hochladen, Dateiliste } = dieser.Status;
    const props = {
      beim Entfernen: Datei => {
        dies.setState(state => {
          const index = status.fileList.indexOf(Datei);
          const newFileList = state.fileList.slice();
          neueDateiliste.splice(index, 1);
          zurückkehren {
            Dateiliste: neueDateiliste,
          };
        });
      },
      vor dem Hochladen: Datei => {
        this.setState(state => ({
          Dateiliste: [...status.Dateiliste, Datei],
        }));
        gibt false zurück;
      },
      Dateiliste,
    };
    zurückkehren (
      <div Stil = {{ Breite: "80 %", Rand: "auto", Polsterung: 20 }}>
        <h2>{dieser.zustand.baifenbi + '%'}</h2>
        <Hochladen bei Änderung={(e) => { this.onchange(e) }} {...props}>
          <Schaltfläche>
            <UploadOutlined /> Zum Hochladen klicken
          </Button>
        </Hochladen>
        <Schaltfläche
          Typ="primär"
          bei Klick={this.handleUpload}
          deaktiviert={fileList.length === 0}
          wird geladen={Hochladen}
          Stil={{ marginTop: 16 }}
        >
          {Hochladen? 'Hochladen': 'Upload starten'}
        </Button>
        <Fortschritt Stil={{ marginTop: 20 }} Status={this.state.baifenbi !== 0 ? 'Erfolg' : ''} Prozent={this.state.baifenbi}></Fortschritt>
      </div>
    )
  }
}

Standard-App exportieren;

Das Backend verwendet Express, um den Webserver auszuführen

1. Erstellen Sie zuerst den Ordner webSever
  cd webServer
  npm -init -y //Datei package.json erstellen 2. Express und die für den Dateiupload erforderlichen Pakete installieren npm install express multer ejs

3. Erstellen Sie app.js

app.js

var express = erforderlich('express');
var app = express();
var Pfad = erforderlich('Pfad');
var fs = erfordern('fs')
var multer = require('multer')
//Domänenübergreifenden Zugriff einrichten app.all("*", function (req, res, next) {
    //Legen Sie den Domänennamen fest, der domänenübergreifend sein darf. * bedeutet, dass jedem Domänennamen das domänenübergreifende Benutzen gestattet ist. res.header("Access-Control-Allow-Origin", req.headers.origin || '*');
    // //Erlaubte Header-Typen res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
    // //Domänenübergreifend zulässige Anforderungsmethodenres.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    // Cookies sind erlaubt
    res.header("Zugriffskontrolle-Anmeldeinformationen zulassen", true);
    if (req.method == 'OPTIONEN') {
        res.sendStatus(200);
    } anders {
        nächste();
    }
})


app.use(express.static(Pfad.join(__dirname, 'public')));
//Vorlagen-Engine app.set('views', path.join(__dirname, 'views'));
app.set('Ansichts-Engine', 'ejs');

app.get("/", (req, res, next) => {
    res.render("index")
})
//Dateien hochladen app.post('/upload', (req, res, next) => {

    var upload = multer({ dest: 'upload/' }).any();
  
    hochladen(erf, res, err => {
      wenn (Fehler) {
        console.log(fehler);
        zurückkehren
      }
      let Datei = req.files[0]
      let filname = datei.originalname
      var alterPfad = Datei.Pfad
      var neuerPfad = Pfad.beitreten(Prozess.cwd(), "upload/" + neues Date().getTime()+Dateiname)
      var src = fs.createReadStream(alterPfad);
      var dest = fs.createWriteStream(neuer Pfad);
      src.pipe(Ziel);
      src.on("Ende", () => {
        let filepath = Pfad.join(Prozess.cwd(), alterPfad)
        fs.unlink(Dateipfad, err => {
          wenn (Fehler) {
            console.log(fehler);
            zurückkehren
          }
          res.send("ok")
        })
  
      })
      src.on("Fehler", err => {
        res.end("err")
      })
  
    })
  
  })
  

app.use((req, res) => {
    res.send("404")
})
app.listen(5000)

Nachdem das Frontend gestartet wurde, starten Sie die Hintergrundknoten-App, um Folgendes zu erreichen:

Oben sind die Einzelheiten des Beispiels, wie React den Fortschritt von Datei-Uploads anzeigt. Weitere Informationen dazu, wie React den Fortschritt von Datei-Uploads anzeigt, finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • React-Implementierungsbeispiel mit Amap (react-amap)
  • Detaillierte Erklärung des virtuellen DOM und des Diff-Algorithmus in React
  • So verwenden Sie Lazy Loading in React, um die Ladezeit des ersten Bildschirms zu verkürzen
  • So führen Sie das React-Projekt auf dem offiziellen WeChat-Konto aus
  • Wie man mit React elegant CSS schreibt
  • Kapseln Sie eine einfachste ErrorBoundary-Komponente zur Behandlung von React-Ausnahmen
  • Schritte zur Erstellung einer React Fiber-Struktur
  • Detaillierte Erklärung der Verwendung von Refs in den drei Hauptattributen von React
  • Schreiben Sie ein React-ähnliches Framework von Grund auf
  • React useEffect verstehen und verwenden

<<:  So installieren Sie eine MySQL-Datenbank auf einem Debian 9-System

>>:  So erhalten Sie den tatsächlichen Pfad des aktuellen Skripts in Linux

Artikel empfehlen

Vue Virtual DOM – Schnellstart

Inhaltsverzeichnis Virtueller DOM Was ist virtuel...

MySQL-Tabellenübergreifende Abfrage und Tabellenübergreifende Aktualisierung

Freunde, die über Grundkenntnisse in SQL verfügen...

So schreiben Sie mithilfe von Filtern transparentes CSS für Bilder

So schreiben Sie mithilfe von Filtern transparente...

Beispielcode einer SVG-Schaltfläche basierend auf einer CSS-Animation

Der spezifische Code lautet wie folgt: <a href...

Detaillierte Einführung in das MySQL-Installationstutorial unter Windows

Inhaltsverzeichnis 1. Einige Konzepte, die Sie vo...

Super detaillierte Schritte zur Installation von Zabbix3.0 auf Centos7

Vorwort Vor Kurzem wurde ein Teil der Geschäftstä...

Zusammenfassung des Front-End-Wissens im Gokudō-Spiel

Hintergrund Zu Beginn meines Japanisch-Lernens fi...

Lösung für den Konflikt zwischen Nginx und Backend-Port

Frage: Bei der Entwicklung des Alice-Verwaltungss...

CentOS 7 erstellt Hadoop 2.10 mit hoher Verfügbarkeit (HA)

Dieser Artikel beschreibt, wie man einen hochverf...

Das WeChat-Applet realisiert die Chatroom-Funktion

In diesem Artikel wird der spezifische Code des W...

Beispiel für einen Fork- und Mutex-Lock-Prozess im Linux-Multithreading

Inhaltsverzeichnis Frage: 1. Erster Versuch 2. Ra...

Vue Storage enthält eine Lösung für Boolesche Werte

Vue speichert Speicher mit Booleschen Werten Ich ...