Axios ist eine auf Versprechen basierende HTTP-Bibliothek, die in Browsern und node.js verwendet werden kann. React-Demo zur Anzeige des Datei-UploadfortschrittsInstallieren Sie die React-Anwendung schnell auf dem FrontendStellen 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.jsimportiere 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ühren1. 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.jsvar 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:
|
<<: So installieren Sie eine MySQL-Datenbank auf einem Debian 9-System
>>: So erhalten Sie den tatsächlichen Pfad des aktuellen Skripts in Linux
1. Grundkenntnisse: HTTP-Header-Benutzeragent Use...
Inhaltsverzeichnis Der Unterschied zwischen Hash ...
Inhaltsverzeichnis 1. Grundkonzepte von GTID 2. G...
Inhaltsverzeichnis 1. Holen Sie sich zuerst den e...
Inhaltsverzeichnis Bilderfassung durch SVG CSS-Te...
Es ist sehr üblich, Bilder auf einer Seite hervor...
Vor Kurzem musste ich einen kaskadierenden Auswah...
Vorwort Als ich kürzlich ein Projekt erstellte, d...
Wort Seit der ersten Version von MySQL 8.0 liegen...
Es gibt zwei Möglichkeiten, CSV in Win10 zu expor...
Vorwort: Ich bin auf die Anforderung gestoßen, be...
Beim Setzen des Textes im Suchtextfeld springt di...
1. Fazit Syntax: Limit-Offset, Zeilen Schlussfolg...
Ich entwickle derzeit ein neues App-Projekt. Dies...
Ein Frame ist ein Webseitenbildschirm, der in mehr...