中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-03-04 13:43:51 來源:億速云 閱讀:191 作者:小新 欄目:web開發

這篇文章主要介紹了node.js使用multer中間件上傳文件的方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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

  • 數據提交(post表單提交)

  • 文件上傳

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

難受…

以前寫過的圖片文件上傳文章中用到了formidable模塊,其核心在于:

var form=new formidable.IncomingForm();

其后的form.uploadDirfield/end的監聽 … 都是基于此。

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


于是,筆者找到了 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() ,它里面要指定一個參數——前端<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中間件上傳文件的方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

花莲市| 新泰市| 宁德市| 家居| 江陵县| 始兴县| 海丰县| 商丘市| 崇仁县| 山丹县| 兴文县| 肇东市| 台东县| 崇义县| 阿克陶县| 通渭县| 永福县| 洪洞县| 夏津县| 北安市| 衡阳市| 女性| 扬中市| 山东省| 定安县| 肃宁县| 宿迁市| 定南县| 抚远县| 农安县| 南宫市| 额尔古纳市| 湖口县| 信宜市| 南陵县| 鹿泉市| 藁城市| 隆昌县| 昌乐县| 乌海市| 邻水|