這篇文章主要介紹了node.js使用multer中間件上傳文件的方法,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)是一家成都網(wǎng)站制作、成都網(wǎng)站建設(shè),提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,定制網(wǎng)站,網(wǎng)站開發(fā)公司,2013年開創(chuàng)至今是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營(yíng)并提出專業(yè)建議和思路。
body-parser中間件,其實(shí)“極不完美” —— 它只能處理“單純的數(shù)據(jù)”。
眾所周知,post常用于兩件事:
數(shù)據(jù)提交(post表單提交)
文件上傳
但“大名鼎鼎”的body-parser只能做到第一點(diǎn)。
難受…
以前寫過的圖片文件上傳文章中用到了formidable模塊,其核心在于:
var form=new formidable.IncomingForm();
其后的form.uploadDir
、field/end的監(jiān)聽 … 都是基于此。
好了這里我們要說的是缺點(diǎn):和body-parser一樣,formidable插件只能用來處理圖片格式,也是一大遺憾了。
于是,筆者找到了 multer中間件,希望它能“拯救者支離破碎的山河” (呵呵)
(c)npm install express multer
const express = require('express'); const bodyparser = require('body-parser');//解析post數(shù)據(jù) 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文件數(shù)據(jù) 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:因?yàn)閎ody中只能存放(文字)數(shù)鋸——這里如果用body-parser的話,看到的只是控制臺(tái)上顯示的文件名。
代碼中objMulter.any()
作用是“ 獲取所有數(shù)據(jù) ”;
與any()
相對(duì)的還有一個(gè)single()
,它里面要指定一個(gè)參數(shù)——前端 里的name名!如本例中還可以這樣寫:
server.use(objMulter.single('f1'));
前端代碼如下 —— 文件提交,指定格式為multipart/form-data
:
其實(shí)就是用了fs模塊中的rename(原路徑,新路徑,callback)方法,通過將文件強(qiáng)制更改存放路徑來達(dá)到“上傳文件”的目的。
今日份擴(kuò)展:
node中常用path模塊中的resolve方法來“指定文件”(注意第16/17行):
var http = require('http'); var fs = require('fs'); var path = require('path'); var server = http.createServer(function (req, res) { var method = req.method; // 獲取請(qǐng)求方法 if (method === 'POST') { // 暫只關(guān)注 post 請(qǐng)求 var dataStr = ''; req.on('data', function (chunk) { // 接收到數(shù)據(jù),先存儲(chǔ)起來 var chunkStr = chunk.toString() dataStr += chunkStr }); req.on('end', function () { // 接收數(shù)據(jù)完成,將數(shù)據(jù)寫入文件 var fileName = path.resolve(__dirname, 'post.txt'); fs.writeFile(fileName, dataStr) res.end('OK'); }); } }); server.listen(8081);
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“node.js使用multer中間件上傳文件的方法”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!