Heim >Web-Frontend >js-Tutorial >Ausführliche Erklärung zum Hochladen und Verwenden von Express Multer
In diesem Artikel wird hauptsächlich die Verwendung von Multer-Upload in der Express-Serie vorgestellt. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
Ich habe „The Definitive Guide to NodeJS“ schon lange gelesen, aber ich habe es nie sorgfältig gelesen Zeit.
Es gibt immer noch viele Vorteile, hauptsächlich aufgrund einiger Details der Verwendung von Wenpack. Außerdem bin ich nicht mehr verwirrt über den Knoten. Aber um ehrlich zu sein, ist es auf der aktuellen Ebene ziemlich schwierig, etwas direkt mit dem Knoten zu tun. Heute habe ich den Link zur Mongodb- und MySQL-Datenbank getestet. Obwohl er verwendet werden kann, ist er immer noch seltsam. Daher möchte ich zuerst das vorhandene Framework verwenden und dann den Knoten rückwärts lernen.
Für das Framework habe ich mich entschieden
Ich habe hauptsächlich die in mehreren Büchern erwähnte Middleware getestet und viele APIs sind veraltet ein aktualisierter Ort.
Was ich derzeit nützlich finde, sind: Multer und Statik.
Letzterer kann die Seite lokal debuggen, was besonders für mobile Seiten nützlich ist.
Dieses Mal werde ich hauptsächlich über Multer sprechen. Ich habe nicht alle Funktionen implementiert, sondern nur die Funktion zum Hochladen eines einzelnen Bildes, und ich werde die anderen erkunden.
Dies ist das gesamte Dateiverzeichnis, es gibt zwei Hauptdateien, eine ist main.js im Stammverzeichnis und die andere ist public/index.html.
Platzieren Sie den Code:
//main.js let express = require('express'); var multer = require('multer') var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'public/'); }, filename: function (req, file, cb) { cb(null, Date.now() + '.png'); } }) var upload = multer({ storage: storage }) //var upload = multer({ dest: 'public/' }) let app = express() app.use(express.static('public')) app.post('/public/index.html',upload.single('myfile'),(req,res,next)=>{ console.log(req.file) res.send(req.file) }) app.listen(3300,'127.0.0.1')
<!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <input type="file" id="file" accept="image/*"> <p id="result"></p> <img src="" alt="" id="img" width="40" height="40"> <script> let file = document.getElementById('file'); file.onchange = function (e) { let file = e.target.files[0]; let xhr = new XMLHttpRequest(); let fd = new FormData(); fd.append('myfile', file) xhr.open('post', '/public/index.html') xhr.onload = function () { // console.log(xhr) if (xhr.status === 200) { let data = JSON.parse(xhr.responseText) document.getElementById('result').innerHTML = this.response document.getElementById('img').src = data.filename } } xhr.send(fd) } </script> </body> </html>
Ich möchte nicht auf die JQuery-Bibliothek verweisen , also habe ich nativ Ajax geschrieben, im Allgemeinen sollte es nicht schwierig sein, nach dem Klicken auf die Schaltfläche zum Auswählen des Bildes werden die Bildinformationen in einem Objekt mit dem Schlüsselnamen myfile
platziert und an den Hintergrund übergeben.
Express speichert die empfangenen Bilder in der /public/
-Datei. Hier gibt es eine kleine Gefahr. Sie können sehen, dass ich diese Codezeile in main.js
kommentiert habe:
var upload = multer({ dest: 'public/' })
Tatsächlich habe ich diese Codezeile am Anfang verwendet, was Es muss ein Pfad zum Speichern der Datei ausgewählt werden, es gibt jedoch ein kleines Problem beim Schreiben auf diese Weise. Die gespeicherte Datei hat kein Suffix. dest
res.send(req.file)In einem Szenario lade ich beispielsweise ein Bild hoch Wenn ich jedoch das nächste Mal meine persönliche Seite betrete, können die vom Hintergrund zurückgegebenen Daten nicht als Adresse des Bildes verwendet werden, was sehr problematisch ist. Also habe ich im Internet einen Grund gefunden und den obigen Codekommentar durch diesen ersetzt:
var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'public/'); }, filename: function (req, file, cb) { cb(null, Date.now() + '.png'); } }) var upload = multer({ storage: storage })
ist die Adresse, an der die Datei gespeichert ist, und destination
Einstellungen ist der Name der Datei. Wenn er dann so geschrieben ist: filename
filename: function (req, file, cb) { cb(null, file.fieldname + '.png'); }, werden Sie feststellen, dass der Name jedes Bildes, das Sie übergeben, , das neue überschreibt das alte. Um also alle übergebenen Bilder zu speichern, verwende ich Date.now() als unterschiedliche Kennung für jedes Bild, damit es nicht zu einem Überschreiben kommt.
myfile.png
Das war's vorerst. Ich werde es das nächste Mal aktualisieren, wenn ich weitere Bilder hochlade.
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zum Hochladen und Verwenden von Express Multer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!