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

HTML-Tutorial: Das Optgroup-Element verstehen

Wählen Sie die Kategorieauswahl. Nach Tests könne...

Detailliertes Tutorial zur Installation des Tomcat9-Windows-Dienstes

1. Vorbereitung 1.1 Laden Sie das komprimierte To...

WeChat-Applet implementiert Suchfeldfunktion

In diesem Artikelbeispiel wird der spezifische Co...

So installieren Sie Docker unter Windows 10 Home Edition

Ich habe Docker kürzlich verwendet, um ein Projek...

Detaillierte Erklärung der MySQL-Partitionstabelle

Vorwort: Partitionierung ist ein Tabellenentwurfs...

Pygame-Code zum Erstellen eines Schlangenspiels

Inhaltsverzeichnis Verwendete Pygame-Funktionen E...