首頁  >  文章  >  web前端  >  node.js使用multer中間件上傳文件

node.js使用multer中間件上傳文件

青灯夜游
青灯夜游轉載
2021-03-04 10:36:161726瀏覽

這篇文章跟大家介紹一下node.js使用multer中間件解決post檔上傳問題的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

node.js使用multer中間件上傳文件

相關推薦:《nodejs 教學

body-parser中間件,其實「極度不完美」 —— 它只能處理「單純的數據」。
眾所周知,post常用於兩件事:

  • 資料提交(post表單提交)

  • 檔案上傳

但「大名鼎鼎」的body-parser只能做到第一點。

難受…

先前寫過的圖片檔案上傳文章中用到了formidable模組,其核心在於:<pre class="brush:js;toolbar:false;">var form=new formidable.IncomingForm();</pre>其後的form.uploadDir

field/end的監聽

… 都是基於此。


好了這裡我們要說的是缺點:和body-parser一樣,formidable外掛只能用來處理圖片格式,也是一大遺憾了。

於是,筆者找到了

multer中間件

,希望它能「拯救者支離破碎的山河」(呵呵)

multer中間件的應用之一:檔案上傳

(c)npm install express multer
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);

這裡,用req.files頂替了req.body:因為body中只能存放(文字)數鋸-這裡如果用body-parser的話,看到的只是控制台上顯示的檔案名稱。 程式碼中
objMulter.any() 作用是「 取得所有資料」;any() 相對的還有一個single( ) ,它裡面要指定一個參數-前端

d5fd7aea971a85678ba271703566ebfd

裡的name名!如本例還可以這樣寫:<pre class="brush:js;toolbar:false;">server.use(objMulter.single(&amp;#39;f1&amp;#39;));</pre>前端程式碼如下- 檔案提交,指定格式為

multipart/form-data

<form action="http://localhost:8081/" method="post" enctype="multipart/form-data">
	文件:<input type="file" name="f1" /><br />
	<input type="submit" value="上传" />
</form>

其實就是用了fs模組中的rename(原路徑,新路徑,callback)方法,透過將檔案強制更改存放路徑來達到「上傳檔案」的目的。


今日擴展:

node中常用path模組中的resolve方法來「指定檔案」(注意第16/17行):

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);
更多程式相關知識,請造訪:

程式設計學習###! ! ###

以上是node.js使用multer中間件上傳文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除