這篇文章跟大家介紹一下node.js使用multer中間件解決post檔上傳問題的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
相關推薦:《nodejs 教學》
body-parser中間件,其實「極度不完美」 —— 它只能處理「單純的數據」。
眾所周知,post常用於兩件事:
資料提交(post表單提交)
檔案上傳
但「大名鼎鼎」的body-parser只能做到第一點。
難受…
先前寫過的圖片檔案上傳文章中用到了formidable模組,其核心在於:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">var form=new formidable.IncomingForm();</pre><div class="contentsignin">登入後複製</div></div>
其後的form.uploadDir、
… 都是基於此。
於是,筆者找到了
multer中間件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( )
,它裡面要指定一個參數-前端
裡的name名!如本例還可以這樣寫:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">server.use(objMulter.single(&#39;f1&#39;));</pre><div class="contentsignin">登入後複製</div></div>
前端程式碼如下- 檔案提交,指定格式為
:其實就是用了fs模組中的rename(原路徑,新路徑,callback)方法,透過將檔案強制更改存放路徑來達到「上傳檔案」的目的。<form action="http://localhost:8081/" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="f1" /><br /> <input type="submit" value="上传" /> </form>登入後複製
今日擴展:
以上是node.js使用multer中間件上傳文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!