您好,登錄后才能下訂單哦!
這篇文章主要介紹了node.js使用multer中間件上傳文件的方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
body-parser中間件,其實“極不完美” —— 它只能處理“單純的數據”。
眾所周知,post常用于兩件事:
數據提交(post表單提交)
文件上傳
但“大名鼎鼎”的body-parser只能做到第一點。
難受…
以前寫過的圖片文件上傳文章中用到了formidable模塊,其核心在于:
var form=new formidable.IncomingForm();
其后的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
:
<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('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);
感謝你能夠認真閱讀完這篇文章,希望小編分享的“node.js使用multer中間件上傳文件的方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。