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.
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();
Das nachfolgende form.uploadDir
und field/end Überwachung< /em> … basieren alle darauf. form.uploadDir
、field/end的监听 … 都是基于此。
好了这里我们要说的是缺点:和body-parser一样,formidable插件只能用来处理图片格式,也是一大遗憾了。
于是,笔者找到了 multer中间件 ,希望它能“拯救者支离破碎的山河” (呵呵)
(c)npm install express multer
const express = require('express'); const bodyparser = require('body-parser');//解析post数据 const multer = require('multer'); //解析Post文件 const fs = require('fs'); const pathlib = require('path'); //解析文件路径 var server = express(); var objMulter = multer({dest:'./www/upload'}); //用户上传文件存入dest目录下 server.use(objMulter.any()); //处理任何用户上传的文件 //处理post文件数据 server.post('/',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('上传失败'); }else{ res.send('上传成功'); } }); }); server.listen(8081);
这里,用req.files顶替了req.body:因为body中只能存放(文字)数锯——这里如果用body-parser的话,看到的只是控制台上显示的文件名。
代码中objMulter.any()
作用是“ 获取所有数据 ”;
与any()
相对的还有一个single()
,它里面要指定一个参数——前端<input>
里的name名!如本例中还可以这样写:
server.use(objMulter.single('f1'));
前端代码如下 —— 文件提交,指定格式为multipart/form-data
Also hat der AutorMulter-Middleware
<form action="http://localhost:8081/" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="f1" /><br /> <input type="submit" value="上传" /> </form>
var http = require('http'); var fs = require('fs'); var path = require('path'); var server = http.createServer(function (req, res) { var method = req.method; // 获取请求方法 if (method === 'POST') { // 暂只关注 post 请求 var dataStr = ''; req.on('data', function (chunk) { // 接收到数据,先存储起来 var chunkStr = chunk.toString() dataStr += chunkStr }); req.on('end', function () { // 接收数据完成,将数据写入文件 var fileName = path.resolve(__dirname, 'post.txt'); fs.writeFile(fileName, dataStr) res.end('OK'); }); } }); server.listen(8081);
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
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!