記一次node服務(wù)端文件校驗歷程_request.files讀取文件屬性

出于某種不可描述的需求嫉入,需要在服務(wù)端校驗上傳的文件類型和大小抄淑,由于之前沒接觸過node刻剥,就開始了愉快的踩坑之旅。

坑一:request.on()事件不執(zhí)行

因為接收到了request請求腻窒,首先希望通過request的on事件監(jiān)聽data事件昵宇,達(dá)到統(tǒng)計數(shù)據(jù)大小的目,先看代碼:

router.post("/upload", async (req, res) => {
      logger.info("Request Comming In", req.files.length);
      req.on('data', (chunk) => {
        dataSize += chunk.length;
        logger.info("${chunk.length} bytes of data comming in, ${dataSize} bytes has received");
      });
      req.on("end", () => {
        logger.info("${dataSize} bytes data received in total");
        res.sendStatus(200);
      });
});

然而測試發(fā)現(xiàn)儿子,以上on事件完全沒有執(zhí)行瓦哎,菜鳥表示不懂,歡迎大佬指教典徊;

坑二:formidable.on()事件不執(zhí)行

后來又百度到了formidable杭煎,于是就寄希望于它,當(dāng)然卒落,依舊踩坑了:

router.post("/upload", async (req, res) => {
      logger.info("Request Comming In", req.files.length);
      var form = new formidable.IncomingForm();
      form.on('file', (field, file) => {
// xxxx
      });
      form.on("field", (field, value) => {
// xxxx
      });
});

真的想不通羡铲,難不成這些事件被監(jiān)聽之前沒有emit?菜鳥不懂儡毕,也不敢問也切,但記得formidable還有的個parse方法,再來一試腰湾。

坑三:formidable.parse()事件無數(shù)據(jù)

router.post("/upload", async (req, res) => {
      var form = new formidable.IncomingForm();
      form.parse(req, function (err, fields, files) {
        if (err)  res.sendStatus(500);
        logger.info("fields:\n", JSON.stringify(fields));
        logger.info("files:\n", JSON.stringify(files));
    } 
});

無奈雷恃,通過打印的日志發(fā)現(xiàn),fields和files全是空的费坊,我太難了倒槐。。附井。此處附上formidable的簡單介紹:
https://www.cnblogs.com/Trr-984688199/p/6285958.html?utm_source=itdadao&utm_medium=referral
可是問題依舊是要解決的呀讨越!

靈光一閃解決之道:request.files

我突然想到,之前通過JSON.stringify打印request的時候報錯了永毅,但同樣的方法打印request.body是可以的把跨,要是request里面存在file這樣的字段了呢?隨便一試沼死,果然有request.files着逐!打印,其結(jié)構(gòu)如下
[{"fieldname":"my_file_name","originalname":"wo-tai-nan-le.jpg","encoding":"7bit","mimetype":"image/jpeg","buffer":{"type":"Buffer","data":[255,216,255....]}}]
參考files的數(shù)據(jù)結(jié)構(gòu),解決問題就不難了耸别。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末健芭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秀姐,更是在濱河造成了極大的恐慌吟榴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囊扳,死亡現(xiàn)場離奇詭異,居然都是意外死亡兜看,警方通過查閱死者的電腦和手機锥咸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來细移,“玉大人搏予,你說我怎么就攤上這事』≡” “怎么了畔塔?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵哪替,是天一觀的道長。 經(jīng)常有香客問我,道長柏副,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任匀泊,我火速辦了婚禮醇王,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搁吓。我一直安慰自己原茅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布堕仔。 她就那樣靜靜地躺著擂橘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摩骨。 梳的紋絲不亂的頭發(fā)上通贞,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音仿吞,去河邊找鬼滑频。 笑死,一個胖子當(dāng)著我的面吹牛唤冈,可吹牛的內(nèi)容都是我干的峡迷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绘搞!你這毒婦竟也來了彤避?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤夯辖,失蹤者是張志新(化名)和其女友劉穎琉预,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒿褂,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡圆米,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了啄栓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娄帖。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昙楚,靈堂內(nèi)的尸體忽然破棺而出近速,到底是詐尸還是另有隱情,我是刑警寧澤堪旧,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布削葱,位于F島的核電站,受9級特大地震影響淳梦,放射性物質(zhì)發(fā)生泄漏析砸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一爆袍、第九天 我趴在偏房一處隱蔽的房頂上張望干厚。 院中可真熱鬧,春花似錦螃宙、人聲如沸蛮瞄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挂捅。三九已至,卻和暖如春堂湖,著一層夾襖步出監(jiān)牢的瞬間闲先,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工无蜂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伺糠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓斥季,卻偏偏與公主長得像训桶,于是被迫代替她去往敵國和親累驮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,305評論 0 6
  • 個人入門學(xué)習(xí)用筆記舵揭、不過多作為參考依據(jù)谤专。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,451評論 1 37
  • Node基本 node的最大特性莫過于基于事件驅(qū)動的非阻塞I/O模型午绳。 node通過事件驅(qū)動的方式處理請求置侍,無須為...
    AkaTBS閱讀 2,159評論 0 11
  • //公共引用 varfs =require('fs'), path =require('path'); 1、讀取文...
    才気莮孒閱讀 827評論 0 1
  • 翠峰峻峙拦焚,看霧霽滿腰蜡坊,天賜祥瑞。峰頂門開洞啟赎败,接通神髓算色。可隨絕壁青云里螟够,與仙唔,鬼谷謀計峡钓。世間群族妓笙,慕名齊聚...
    卓君務(wù)閱讀 4,335評論 96 219