全面解析node 表單的圖片上傳
node 全面解析表單的圖片上傳 ,multiparty解析與內(nèi)容類型的HTTP請求multipart/form-data,也被稱為文件上傳。
multiparty安裝
npm install multiparty
html代碼
<form action="/api/uppic" method="post" > <input type="file" name="pic" > <input type="submit"> </form>
node 代碼
app.route('/api/uppic').post(function(req,res){ var multiparty = require('multiparty'); var form = new multiparty.Form();//新建表單 //設(shè)置編輯 form.encoding = 'utf-8'; //設(shè)置圖片存儲路徑 form.uploadDir = "Uploads/gaoxiao/"; form.keepExtensions = true; //保留后綴 form.maxFieldsSize = 2*1024*1024; //內(nèi)存大小 form.maxFilesSize= 5*1024*1024;//文件字節(jié)大小限制,超出會報(bào)錯(cuò)err //表單解析 form.parse(req, function(err,fields,files) { //報(bào)錯(cuò)處理 if(err){ console.log(err); var u={"error" :1,"message":'請上傳5M以圖片'}; res.end(JSON.stringify(u)); return false; } //獲取路徑 var oldpath=files.imgFile[0]['path']; //文件后綴處理格式 if(oldpath.indexOf('.jpg')>=0){ var suffix='.jpg'; }else if(oldpath.indexOf('.png')>=0){ var suffix='.png'; }else if(oldpath.indexOf('.gif')>=0){ var suffix='.gif'; }else{ var u={"error" :1,"message":'請上傳正確格式'}; res.end(JSON.stringify(u)); return false; } var url='Uploads/gaoxiao/'+Date.now()+suffix; var fs=require('fs'); //給圖片修改名稱 fs.renameSync(oldpath,url); var u={ "error" : 0, "url" : '/'+url} res.end(JSON.stringify(u)); }); });
multiparty
multiparty.Form創(chuàng)建一個(gè)新的形式**
encoding:用于輸入表單字段集編碼。默認(rèn)為utf8
maxFieldsSize:限制內(nèi)存的所有字段(而不是文件)的量可以以字節(jié)為單位分配。如果超過該值,一個(gè)error事件被發(fā)射。默認(rèn)大小為2MB。
maxFields:限制,將發(fā)射一個(gè)前解析字段的數(shù)目error的事件。一個(gè)文件算作在這種情況下,一個(gè)字段。默認(rèn)為1000。
maxFilesSize:上傳文件大小限制,只有當(dāng)相關(guān)autoFiles的true。限制接受合并所有文件的總字節(jié)數(shù)。如果超過該值,一個(gè)error事件被發(fā)射。默認(rèn)值是無窮大。
autoFields:啟用field事件和禁用part事件的字段。這是自動設(shè)置為true如果添加了一個(gè)field偵聽器。
uploadDir:只有當(dāng)相關(guān)autoFiles的true。目錄放置文件上傳。您以后可以使用移動它們fs.rename()。默認(rèn)為os.tmpDir()。
form.parse(req,function(err,fields,files){})
- fields: 是一個(gè)對象(上傳名稱和值),其屬性名的字段名稱和值是字段值的數(shù)組。
- files :是一個(gè)對象(上傳名稱和服務(wù)器文件路徑),其屬性名的字段名稱和值是文件對象的數(shù)組。
files內(nèi)文件對象file - 具有這些屬性的對象:
- fieldName-同name-此文件中的字段名
- originalFilename -文件名,對于該文件的用戶的報(bào)告
- path - 在磁盤上載文件的絕對路徑
- headers - 這是與該文件一起發(fā)送的HTTP頭
- size -以字節(jié)的文件大小
node表單解析(multiparty)的api地址:https://www.npmjs.com/package/multiparty
以上所述是小編給大家介紹的全面解析node 表單的圖片上傳,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- nodejs+mongodb aggregate級聯(lián)查詢操作示例
- Node.js+ES6+dropload.js實(shí)現(xiàn)移動端下拉加載實(shí)例
- node微信開發(fā)之獲取access_token+自定義菜單
- 詳解nodejs微信公眾號開發(fā)——6.自定義菜單
- JavaScript NodeTree導(dǎo)航欄(菜單項(xiàng)JSON類型/自制)
- nodejs 實(shí)現(xiàn)模擬form表單上傳文件
- Nodejs之http的表單提交
- Nodejs下用submit提交表單提示cannot post錯(cuò)誤的解決方法
- Node層模擬實(shí)現(xiàn)multipart表單的文件上傳示例
- 推薦一個(gè)基于Node.js的表單驗(yàn)證庫
- node省市區(qū)三級數(shù)據(jù)性能測評實(shí)例分析
相關(guān)文章
node.js程序作為服務(wù)并在windows下開機(jī)自啟動(用forever)
這篇文章主要介紹了node.js程序作為服務(wù)并在windows下開機(jī)自啟動的相關(guān)資料,因?yàn)閷?shí)現(xiàn)的功能比較簡單,沒有選擇功能比較強(qiáng)大的pm2,文中選擇利用了forever,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03Nodejs實(shí)現(xiàn)WebSocket代碼實(shí)例
這篇文章主要介紹了Nodejs實(shí)現(xiàn)WebSocket代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05node puppeteer(headless chrome)實(shí)現(xiàn)網(wǎng)站登錄
這篇文章主要介紹了node puppeteer(headless chrome)實(shí)現(xiàn)網(wǎng)站登錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05詳解node Async/Await 更好的異步編程解決方案
這篇文章主要介紹了詳解Async/Await 更好的異步編程解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05node.js中的http.request.end方法使用說明
這篇文章主要介紹了node.js中的http.request.end方法使用說明,本文介紹了http.request.end的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12