Heim > Web-Frontend > js-Tutorial > node.js verwendet Multer-Middleware zum Hochladen von Dateien

node.js verwendet Multer-Middleware zum Hochladen von Dateien

青灯夜游
Freigeben: 2021-03-04 10:36:16
nach vorne
1856 Leute haben es durchsucht

In diesem Artikel erfahren Sie, wie node.js Multer-Middleware verwendet, um das Problem beim Hochladen von Postdateien zu lösen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

node.js verwendet Multer-Middleware zum Hochladen von Dateien

Verwandte Empfehlungen: „nodejs-Tutorial

Body-Parser-Middleware ist tatsächlich „äußerst unvollkommen“ – sie kann nur „reine Daten“ verarbeiten.
Wie wir alle wissen, wird Post oft für zwei Dinge verwendet:

  • Datenübermittlung (Post-Formularübermittlung)

  • Datei-Upload

Aber der „berühmte“ Body-Parser kann nur das Erste.

Unbequem...

Das beeindruckende Modul wurde in dem Artikel zum Hochladen von Bilddateien verwendet, den ich zuvor geschrieben habe. Sein Kern liegt in:

var form=new formidable.IncomingForm();
Nach dem Login kopieren

Das nachfolgende form.uploadDir und field/end Überwachung< /em> … basieren alle darauf. form.uploadDirfield/end的监听 … 都是基于此。

好了这里我们要说的是缺点:和body-parser一样,formidable插件只能用来处理图片格式,也是一大遗憾了。


于是,笔者找到了 multer中间件 ,希望它能“拯救者支离破碎的山河” (呵呵)

multer中间件的应用之一:文件上传

(c)npm install express multer
Nach dem Login kopieren
const express = require(&#39;express&#39;);
const bodyparser = require(&#39;body-parser&#39;);//解析post数据
const multer = require(&#39;multer&#39;); //解析Post文件
const fs = require(&#39;fs&#39;);
const pathlib = require(&#39;path&#39;); //解析文件路径
 
var server = express();
 
var objMulter = multer({dest:&#39;./www/upload&#39;}); //用户上传文件存入dest目录下
server.use(objMulter.any()); //处理任何用户上传的文件
 
//处理post文件数据
server.post(&#39;/&#39;,function(req,res){
	console.log(req.files[0].originalname); //req.files post文件 originalname为文件名
 
	//获取原始拓展名+后缀名
	var newName = req.files[0].path+pathlib.parse(req.files[0].originalname).ext;
 
	//重命名
	fs.rename(req.files[0].path,newName,function(err){
		if(err){
			res.send(&#39;上传失败&#39;);
		}else{
			res.send(&#39;上传成功&#39;);
		}
	});
});
server.listen(8081);
Nach dem Login kopieren

这里,用req.files顶替了req.body:因为body中只能存放(文字)数锯——这里如果用body-parser的话,看到的只是控制台上显示的文件名。

代码中objMulter.any() 作用是“ 获取所有数据 ”;
any() 相对的还有一个single() ,它里面要指定一个参数——前端<input> 里的name名!如本例中还可以这样写:

server.use(objMulter.single(&#39;f1&#39;));
Nach dem Login kopieren

前端代码如下 —— 文件提交,指定格式为multipart/form-data

Okay, worüber wir hier sprechen möchten, sind die Mängel: Wie der Body-Parser kann das beeindruckende Plug-In nur zur Verarbeitung von Bildformaten verwendet werden, was ebenfalls sehr schade ist.

Also hat der Autor
Multer-Middleware
gefunden, in der Hoffnung, dass sie „die kaputten Berge und Flüsse retten“ kann (haha)

Eine der Anwendungen von Multer-Middleware: Datei-Upload

<form action="http://localhost:8081/" method="post" enctype="multipart/form-data">
	文件:<input type="file" name="f1" /><br />
	<input type="submit" value="上传" />
</form>
Nach dem Login kopieren
var http = require(&#39;http&#39;);
var fs = require(&#39;fs&#39;);
var path = require(&#39;path&#39;);

var server = http.createServer(function (req, res) {
    var method = req.method; // 获取请求方法
    if (method === &#39;POST&#39;) { // 暂只关注 post 请求
        var dataStr = &#39;&#39;;
        req.on(&#39;data&#39;, function (chunk) {
            // 接收到数据,先存储起来
            var chunkStr = chunk.toString()
            dataStr += chunkStr
        });
        req.on(&#39;end&#39;, function () {
            // 接收数据完成,将数据写入文件
            var fileName = path.resolve(__dirname, &#39;post.txt&#39;);
            fs.writeFile(fileName, dataStr)
            res.end(&#39;OK&#39;);
        });
    }
});
server.listen(8081);
Nach dem Login kopieren
Hier, Verwenden Sie req.files anstelle von req.body: Da der Body nur (Text-)Nummern speichern kann, wird bei Verwendung des Body-Parsers hier nur der Dateiname auf der Konsole angezeigt.
Die Funktion von objMulter.any() im Code besteht darin, „alle Daten abzurufen“. Es gibt auch ein single() gegenüber any( ) > muss ein Parameter angegeben werden – der Name im Frontend <input>! In diesem Beispiel können Sie beispielsweise auch so schreiben:

rrreeeDer Front-End-Code lautet wie folgt – Dateiübermittlung, wobei das Format als multipart/form-data angegeben wird: rrreee

🎜 Tatsächlich wird die Umbenennungsmethode (Originalpfad, neuer Pfad, Rückruf) im fs-Modul verwendet, um den Zweck des „Hochladens von Dateien“ zu erreichen, indem der Speicherpfad der Datei zwangsweise geändert wird. 🎜🎜🎜🎜🎜Heutige Erweiterung: 🎜🎜 Die Auflösungsmethode im Pfadmodul wird häufig in Knoten zum „Angeben von Dateien“ verwendet (beachten Sie die Zeilen 16/17): 🎜rrreee🎜Weitere Programmierkenntnisse finden Sie unter: 🎜Programmierung Lernen🎜 ! ! 🎜

Das obige ist der detaillierte Inhalt vonnode.js verwendet Multer-Middleware zum Hochladen von Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage