精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Nodejs進(jìn)階:基于express+multer的文件上傳

開(kāi)發(fā) 前端
圖片上傳是web開(kāi)發(fā)中經(jīng)常用到的功能,node社區(qū)在這方面也有了相對(duì)完善的支持。常用的開(kāi)源組件有multer、formidable等,借助這兩個(gè)開(kāi)源組件,可以輕松搞定圖片上傳。本文主要講解以下內(nèi)容,后續(xù)章節(jié)會(huì)對(duì)技術(shù)實(shí)現(xiàn)細(xì)節(jié)進(jìn)行深入挖掘。

概覽

圖片上傳是web開(kāi)發(fā)中經(jīng)常用到的功能,node社區(qū)在這方面也有了相對(duì)完善的支持。

常用的開(kāi)源組件有multer、formidable等,借助這兩個(gè)開(kāi)源組件,可以輕松搞定圖片上傳。

本文主要講解以下內(nèi)容,后續(xù)章節(jié)會(huì)對(duì)技術(shù)實(shí)現(xiàn)細(xì)節(jié)進(jìn)行深入挖掘。

  • 基礎(chǔ)例子:借助express、multer實(shí)現(xiàn)單圖、多圖上傳。
  • 常用API:獲取上傳的圖片的信息。
  • 進(jìn)階使用:自定義保存的圖片路徑、名稱(chēng)。

關(guān)于作者

程序猿小卡,前騰訊IMWEB團(tuán)隊(duì)成員,阿里云棲社區(qū)專(zhuān)家認(rèn)證博主。歡迎加入 Express前端交流群(197339705)。

正在填坑:《Nodejs學(xué)習(xí)筆記》 / 《Express學(xué)習(xí)筆記》

社區(qū)鏈接:云棲社區(qū) / github / 新浪微博 / 知乎 / Segmentfault / 博客園 / 站酷

環(huán)境初始化

非常簡(jiǎn)單,一行命令。

  1. npm install express multer multer --save 

每個(gè)示例下面,都有下面兩個(gè)文件

  1. ➜  upload-custom-filename git:(master) ✗ tree -L 1 
  2. ├── app.js # 服務(wù)端代碼,用來(lái)處理文件上傳請(qǐng)求 
  3. ├── form.html # 前端頁(yè)面,用來(lái)上傳文件  

基礎(chǔ)例子:?jiǎn)螆D上傳

app.js。

  1. var fs = require('fs'); 
  2. var express = require('express'); 
  3. var multer  = require('multer'
  4.  
  5. var app = express(); 
  6. var upload = multer({ dest: 'upload/' }); 
  7.  
  8. // 單圖上傳 
  9. app.post('/upload', upload.single('logo'), function(req, res, next){ 
  10.     res.send({ret_code: '0'}); 
  11. }); 
  12.  
  13. app.get('/form'function(req, res, next){ 
  14.     var form = fs.readFileSync('./form.html', {encoding: 'utf8'}); 
  15.     res.send(form); 
  16. }); 
  17.  
  18. app.listen(3000);  

form.html。

  1. <form action="/upload-single" method="post" enctype="multipart/form-data"
  2.     <h2>單圖上傳</h2> 
  3.     <input type="file" name="logo"
  4.     <input type="submit" value="提交"
  5. </form>  

運(yùn)行服務(wù)。

  1. node app.js 

訪(fǎng)問(wèn) http://127.0.0.1:3000/form ,選擇圖片,點(diǎn)擊“提交”,done。然后,你就會(huì)看到 upload 目錄下多了個(gè)圖片。

基礎(chǔ)例子:多圖上傳

代碼簡(jiǎn)直不能更簡(jiǎn)單,將前面的 upload.single('logo') 改成 upload.array('logo', 2) 就行。表示:同時(shí)支持2張圖片上傳,并且 name 屬性為 logo。

app.js。

  1. var fs = require('fs'); 
  2. var express = require('express'); 
  3. var multer  = require('multer'
  4.  
  5. var app = express(); 
  6. var upload = multer({ dest: 'upload/' }); 
  7.  
  8. // 多圖上傳 
  9. app.post('/upload', upload.array('logo', 2), function(req, res, next){ 
  10.     res.send({ret_code: '0'}); 
  11. }); 
  12.  
  13. app.get('/form'function(req, res, next){ 
  14.     var form = fs.readFileSync('./form.html', {encoding: 'utf8'}); 
  15.     res.send(form); 
  16. }); 
  17.  
  18. app.listen(3000);  

form.html。

  1. <form action="/upload-multi" method="post" enctype="multipart/form-data"
  2.     <h2>多圖上傳</h2> 
  3.     <input type="file" name="logos"
  4.     <input type="file" name="logos"
  5.     <input type="submit" value="提交"
  6. </form>  

同樣的測(cè)試步驟,不贅述。

獲取上傳的圖片的信息

很多時(shí)候,除了將圖片保存在服務(wù)器外,我們還需要做很多其他事情,比如將圖片的信息存到數(shù)據(jù)庫(kù)里。

常用的信息比如原始文件名、文件類(lèi)型、文件大小、本地保存路徑等。借助multer,我們可以很方便的獲取這些信息。

還是單文件上傳的例子,此時(shí),multer會(huì)將文件的信息寫(xiě)到 req.file 上,如下代碼所示。

app.js。

  1. var fs = require('fs'); 
  2. var express = require('express'); 
  3. var multer  = require('multer'
  4.  
  5. var app = express(); 
  6. var upload = multer({ dest: 'upload/' }); 
  7.  
  8. // 單圖上傳 
  9. app.post('/upload', upload.single('logo'), function(req, res, next){ 
  10.     var file = req.file; 
  11.  
  12.     console.log('文件類(lèi)型:%s', file.mimetype); 
  13.     console.log('原始文件名:%s', file.originalname); 
  14.     console.log('文件大小:%s', file.size); 
  15.     console.log('文件保存路徑:%s', file.path); 
  16.  
  17.     res.send({ret_code: '0'}); 
  18. }); 
  19.  
  20. app.get('/form'function(req, res, next){ 
  21.     var form = fs.readFileSync('./form.html', {encoding: 'utf8'}); 
  22.     res.send(form); 
  23. }); 
  24.  
  25. app.listen(3000);  

form.html。

  1. <form action="/upload" method="post" enctype="multipart/form-data"> 
  2.     <h2>單圖上傳</h2> 
  3.     <input type="file" name="logo"> 
  4.     <input type="submit" value="提交"> 
  5. </form>  

啟動(dòng)服務(wù),上傳文件后,就會(huì)看到控制臺(tái)下打印出的信息。

  1. 文件類(lèi)型:image/png 
  2. 原始文件名:1.png 
  3. 文件大小:18379 
  4. 文件保存路徑:upload/b7e4bb22375695d92689e45b551873d9  

自定義文件上傳路徑、名稱(chēng)

有的時(shí)候,我們想要定制文件上傳的路徑、名稱(chēng),multer也可以方便的實(shí)現(xiàn)。

自定義本地保存的路徑

非常簡(jiǎn)單,比如我們想將文件上傳到 my-upload 目錄下,修改下 dest 配置項(xiàng)就行。

  1. var upload = multer({ dest: 'upload/' }); 

在上面的配置下,所有資源都是保存在同個(gè)目錄下。有時(shí)我們需要針對(duì)不同文件進(jìn)行個(gè)性化設(shè)置,那么,可以參考下一小節(jié)的內(nèi)容。

自定義本地保存的文件名

代碼稍微長(zhǎng)一點(diǎn),單同樣簡(jiǎn)單。multer 提供了 storage 這個(gè)參數(shù)來(lái)對(duì)資源保存的路徑、文件名進(jìn)行個(gè)性化設(shè)置。

使用注意事項(xiàng)如下:

  • destination:設(shè)置資源的保存路徑。注意,如果沒(méi)有這個(gè)配置項(xiàng),默認(rèn)會(huì)保存在 /tmp/uploads 下。此外,路徑需要自己創(chuàng)建。
  • filename:設(shè)置資源保存在本地的文件名。

app.js。

  1. var fs = require('fs'); 
  2. var express = require('express'); 
  3. var multer  = require('multer'
  4.  
  5. var app = express(); 
  6.  
  7. var createFolder = function(folder){ 
  8.     try{ 
  9.         fs.accessSync(folder);  
  10.     }catch(e){ 
  11.         fs.mkdirSync(folder); 
  12.     }   
  13. }; 
  14.  
  15. var uploadFolder = './upload/'
  16.  
  17. createFolder(uploadFolder); 
  18.  
  19. // 通過(guò) filename 屬性定制 
  20. var storage = multer.diskStorage({ 
  21.     destination: function (req, file, cb) { 
  22.         cb(null, uploadFolder);    // 保存的路徑,備注:需要自己創(chuàng)建 
  23.     }, 
  24.     filename: function (req, file, cb) { 
  25.         // 將保存文件名設(shè)置為 字段名 + 時(shí)間戳,比如 logo-1478521468943 
  26.         cb(null, file.fieldname + '-' + Date.now());   
  27.     } 
  28. }); 
  29.  
  30. // 通過(guò) storage 選項(xiàng)來(lái)對(duì) 上傳行為 進(jìn)行定制化 
  31. var upload = multer({ storage: storage }) 
  32.  
  33. // 單圖上傳 
  34. app.post('/upload', upload.single('logo'), function(req, res, next){ 
  35.     var file = req.file; 
  36.     res.send({ret_code: '0'}); 
  37. }); 
  38.  
  39. app.get('/form'function(req, res, next){ 
  40.     var form = fs.readFileSync('./form.html', {encoding: 'utf8'}); 
  41.     res.send(form); 
  42. }); 
  43.  
  44. app.listen(3000);  

form.html。

  1. <form action="/upload" method="post" enctype="multipart/form-data"
  2.     <h2>單圖上傳</h2> 
  3.     <input type="file" name="logo"
  4.     <input type="submit" value="提交"
  5. </form>  

測(cè)試步驟不贅述,訪(fǎng)問(wèn)一下就知道效果了。

寫(xiě)在后面

本文對(duì)multer的基礎(chǔ)用法進(jìn)行了介紹,并未涉及過(guò)多原理性的東西。俗話(huà)說(shuō) 授人以漁不如授人以漁,在后續(xù)的章節(jié)里,會(huì)對(duì)文件上傳的細(xì)節(jié)進(jìn)行挖掘,好讓讀者朋友對(duì)文件上傳加深進(jìn)一步的認(rèn)識(shí)。

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2014-04-18 10:04:15

NodeJS前后端分離

2017-03-02 11:58:31

NodeJS服務(wù)器

2021-09-29 08:08:13

前端技術(shù)編程

2014-07-29 10:35:21

DockerNodeJS

2021-03-04 08:33:20

JavaScript 前端原生js

2020-10-20 11:12:11

Nodejs

2012-04-16 09:19:03

jQuery插件

2024-02-26 00:00:00

NodeExpressjsNodejs

2021-09-26 05:05:46

GoFiber Express

2018-05-09 14:45:50

蘇寧前端Nodejs

2022-08-12 22:53:32

HadoopHDFS分布式

2011-10-18 10:17:13

Node.js

2016-12-15 08:28:34

HttpURLConn上傳文件

2024-02-02 09:14:55

TCP協(xié)議Socket編程WPF

2021-08-30 19:04:29

jsIO

2022-06-13 15:59:13

Node.jsNodeJs

2009-07-06 17:11:38

Servlet文件上傳

2024-03-27 08:28:31

元素拖拽API文件上傳

2009-11-24 15:01:59

PHP通用文件上傳類(lèi)

2009-08-13 15:18:23

C#文件上傳
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲综合另类小说| 国产综合色在线视频区| 亚洲欧美制服另类日韩| 五月天激情视频在线观看| 秋霞a级毛片在线看| 国产精品一区二区三区99| 亚洲91精品在线| 国产精品一区二区亚洲| 北条麻妃一区二区三区在线观看| 欧美午夜精品久久久久久人妖| 亚洲国产激情一区二区三区| 亚洲免费国产视频| 日本欧美一区二区三区乱码 | 国产一区二区视频在线免费观看| www.com国产| 亚洲五月综合| 亚洲欧美日韩天堂| 日本少妇xxxx软件| 日韩国产大片| 色综合色综合色综合| 屁屁影院ccyy国产第一页| 国产视频二区在线观看| 成人性视频网站| 成人中文字幕+乱码+中文字幕| 在线观看日本视频| 综合网五月天| 国产富婆一级全黄大片| 日韩成人伦理电影在线观看| 国内精品久久久久影院 日本资源| 久久一级免费视频| 伊人精品一区| 亚洲精品电影在线观看| 黑人无套内谢中国美女| 欧美天堂在线| 日本黄色一区二区| 91视频 -- 69xx| 青青青国内视频在线观看软件| 国产精品久久久爽爽爽麻豆色哟哟 | 日韩免费视频一区二区| 亚洲77777| 午夜av成人| 色播五月激情综合网| 欧美午夜性视频| 亚洲精品一线| 亚洲视频中文字幕| 日本一区二区免费高清视频| 91在线视频| 中文字幕乱码一区二区免费| 欧美日韩亚洲免费| 头脑特工队2在线播放| 国产一区二区三区在线观看免费 | 2019日韩中文字幕mv| free性欧美hd另类精品| 成人欧美一区二区三区视频网页 | 91久久人澡人人添人人爽欧美 | 久久久久亚洲AV| 91精品综合| 欧美成人激情视频免费观看| 亚洲天堂黄色片| 欧美国产综合| 国内自拍欧美激情| 久久免费播放视频| 亚洲伦伦在线| 国产成人福利视频| 中文字幕理论片| 精品影视av免费| 91成人免费看| 天天摸天天干天天操| 26uuu国产在线精品一区二区| 久久精品人人做人人爽电影| 欧美偷拍视频| 国产精品欧美一区喷水| 黄色网zhan| 岛国毛片av在线| 一本一道久久a久久精品 | 日本午夜精品久久久久| 欧美一二三四在线| 午夜av免费看| 国产欧美日韩| 美女精品视频一区| 久久夜色精品亚洲| 日本aⅴ免费视频一区二区三区| 国产精品一区二区3区| 97人妻一区二区精品免费视频| 国产一区 二区 三区一级| 国产伦精品一区二区三| 国际av在线| 亚洲人成网站在线| 五十路熟女丰满大屁股| 99九九久久| 日韩精品一区二区三区在线观看 | 亚洲伊人春色| 久久精品99久久久香蕉| 日本三级理论片| 免费高清成人在线| 国产精品xxxx| 在线视频1区2区| 亚洲国产色一区| 国产又黄又猛又粗| 99精品国产高清一区二区麻豆| 亚洲另类激情图| 亚洲欧美精品aaaaaa片| 日韩天堂av| 91沈先生在线观看| 日本韩国一区| 一区二区三区中文字幕电影| 97视频在线免费播放| 亚洲视频精选| 日韩中文字幕网址| 韩国av中文字幕| 国产精品一区二区免费不卡 | 毛片网站免费观看| 永久亚洲成a人片777777| 欧美一级高清免费播放| 99精品视频免费看| 国产精品久久综合| 国产精品无码专区av在线播放| 一区二区中文字幕在线观看| 日韩在线观看视频免费| 久久国产精品系列| 国产成人av一区| 干日本少妇视频| 男女啪啪999亚洲精品| 亚洲人成77777在线观看网| 欧美极品视频在线观看| 老汉av免费一区二区三区| 欧美一区1区三区3区公司 | 999日本视频| 91成人高清| 色婷婷亚洲一区二区三区| 怡红院一区二区| 国产综合精品一区| 亚洲精品免费一区二区三区| 午夜在线观看视频| 在线视频欧美区| 国产熟女一区二区| 久久综合亚州| 日本精品一区二区三区视频| 亚洲天堂手机| 国产视频欧美视频| 国产精品999在线观看| 国产白丝精品91爽爽久久| 自拍亚洲欧美老师丝袜| 日本免费一区二区三区等视频| 自拍偷拍亚洲欧美| 在线观看国产精品视频| 国产精品午夜在线| 欧美成人黄色网址| 久久在线播放| 95av在线视频| 污视频网站在线免费| 欧美大片日本大片免费观看| avove在线播放| 国产成人福利片| 少妇人妻大乳在线视频| 久久精品国产亚洲5555| 2019国产精品自在线拍国产不卡| 色呦呦中文字幕| 欧美日韩免费在线观看| 欧美熟妇一区二区| 丝袜美腿亚洲一区二区图片| 性刺激综合网| 久久天堂久久| 欧美亚洲伦理www| 国产福利在线观看| 欧美高清dvd| 久久久精品国产sm调教| 99在线精品观看| 久久精品一区二| 精品国内自产拍在线观看视频| 国产精品亚洲аv天堂网| 成人直播在线| 亚洲精品久久久久国产| 国产精品久久久久久久久夜色| 国产精品日韩精品欧美在线| 欧美人与性动交α欧美精品| 国产日韩高清一区二区三区在线| 日本一区二区三区www| 欧美激情三区| 午夜精品福利电影| 懂色av中文在线| 欧美一区二区三区啪啪| 久久国产精品免费看| 国产精品久久毛片a| 催眠调教后宫乱淫校园| 日韩中文字幕不卡| 男女爱爱视频网站| 免费一区二区三区视频导航| 国产日韩精品综合网站| 国产传媒在线| 久久精品视频在线| 日韩av视屏| 91精品国产入口| 国产成人精品一区二三区| 国产精品久久久久久久第一福利 | 91精东传媒理伦片在线观看| 亚洲电影中文字幕在线观看| 中文天堂资源在线| 成人激情免费电影网址| 午夜久久久精品| 一本一本久久| 裸体大乳女做爰69| 九九免费精品视频在线观看| 99电影网电视剧在线观看| 日本综合字幕| 国内伊人久久久久久网站视频| wwwxxx在线观看| 亚洲а∨天堂久久精品喷水| 亚洲专区在线播放| 黄色精品在线看| 精品人妻伦九区久久aaa片| 国产午夜一区二区三区| 一边摸一边做爽的视频17国产 | 欧美一级片黄色| 国产在线精品视频| 噼里啪啦国语在线观看免费版高清版| 影音先锋亚洲一区| 欧美亚洲视频一区| 欧美手机视频| 蜜桃av久久久亚洲精品| aiss精品大尺度系列| 国产综合在线观看视频| av有声小说一区二区三区| 国产做受69高潮| 手机电影在线观看| 久久久国产精品视频| 最新av网站在线观看 | 怡红院一区二区三区| 91女厕偷拍女厕偷拍高清| 国产午夜在线一区二区三区| 国产精品综合一区二区| 亚洲午夜精品一区| 免费成人美女在线观看| 女人另类性混交zo| 美女91精品| 日韩avxxx| 性一交一乱一区二区洋洋av| 妞干网在线观看视频| 亚洲国产精品一区| 五月丁香综合缴情六月小说| 欧美日韩免费| 国产真实老熟女无套内射| 欧美日韩一区自拍| youjizz.com在线观看| 狠狠色综合网| 成人一区二区免费视频| 亚洲激精日韩激精欧美精品| aa视频在线播放| 亚洲欧美视频一区二区三区| 97国产精东麻豆人妻电影| 日韩一级免费| 国产在线观看福利| 日韩av网站在线观看| 久久久精品麻豆| 久久91精品国产91久久小草 | caoporen国产精品视频| 星空大象在线观看免费播放| 91丨九色丨尤物| 熟女少妇一区二区三区| 国产欧美精品日韩区二区麻豆天美| 亚洲国产日韩一区无码精品久久久| 国产人伦精品一区二区| 91视频最新网址| 亚洲免费电影在线| 精品无码一区二区三区电影桃花 | 久久精品一区二区三区不卡 | 999成人网| 成人在线免费观看视频网站| 亚洲激情二区| 日韩精品一区二区三区色欲av| 麻豆精品一区二区三区| 手机在线播放av| 久久久噜噜噜久久中文字幕色伊伊| 人妻aⅴ无码一区二区三区| 国产精品福利影院| 久草中文在线视频| 欧美三级欧美成人高清www| 中文天堂在线播放| 精品久久久三级丝袜| 欧美91精品久久久久国产性生爱| 丝袜亚洲另类欧美重口| 天天色天天射天天综合网| 欧美亚洲国产日本| 色999韩欧美国产综合俺来也| 高清视频一区| 经典一区二区| 免费的av在线| 午夜亚洲性色福利视频| 中文字幕精品一区二区三区在线| 国产成人啪午夜精品网站男同| 黄色片视频免费观看| 亚洲国产高清在线观看视频| 久久激情免费视频| 日本精品视频一区二区三区| av网站免费大全| 国产一区二区三区三区在线观看| 中文字幕有码在线视频| 国产不卡av在线免费观看| 国产一区二区三区免费观看在线| 久久久久久高清| 欧美va亚洲va日韩∨a综合色| 黄色国产精品视频| 国产mv日韩mv欧美| 美国黄色特级片| 精品美女永久免费视频| av免费在线观看不卡| 亚洲性视频网站| 色偷偷色偷偷色偷偷在线视频| 91精品久久香蕉国产线看观看| 国产aⅴ精品一区二区三区久久| 黄色一级大片免费| 免费在线看一区| 91精品人妻一区二区| 亚洲成人久久影院| hs视频在线观看| 日日噜噜噜夜夜爽亚洲精品| 国产高清不卡| 精品乱码一区| 亚洲国产美女| 日本50路肥熟bbw| 一区av在线播放| 国产日韩欧美一区二区东京热| 亚洲天堂av电影| 亚洲女同av| 精品婷婷色一区二区三区蜜桃| 欧美喷水视频| 51自拍视频在线观看| 国产精品国产a| 久久久久精彩视频| 亚洲女人被黑人巨大进入al | 国产欧美久久久久久| 女人丝袜激情亚洲| 香港三级韩国三级日本三级| 粉嫩蜜臀av国产精品网站| 午夜免费激情视频| 91精品国产91久久久久久一区二区| 亚洲天天影视| 成人国产在线视频| 91久久久精品国产| aaa一级黄色片| 亚洲六月丁香色婷婷综合久久| 国产精品探花视频| 日韩天堂在线视频| 四虎国产精品永久在线国在线| 亚洲精品二区| 精品亚洲porn| 欧美黑人性猛交xxx| 欧美mv日韩mv国产网站| 韩国成人免费视频| 精品乱子伦一区二区三区| 国产色综合网| 男人舔女人下部高潮全视频| 日本韩国精品在线| a√在线中文网新版址在线| 国产精品影院在线观看| 香蕉久久网站| www男人天堂| 欧美日韩亚洲一区二区| 国产精品一二三区视频| 国产精品偷伦视频免费观看国产| 97精品国产一区二区三区| 国产老头和老头xxxx×| 亚洲成人动漫在线观看| 男人久久精品| 国产欧美亚洲视频| 影视一区二区| 一区二区三区免费在线观看视频| 色婷婷国产精品久久包臀| www日韩tube| av激情久久| 视频一区免费在线观看| 搜索黄色一级片| 日韩av在线一区二区| 成人在线网站| www.亚洲一区二区| av网站免费线看精品| 性色av一区二区三区四区| 超碰日本道色综合久久综合| 国产图片一区| 亚洲精品久久久中文字幕| 一区二区三区色| 国产色a在线| 国产不卡一区二区在线观看 | 国产精品美乳一区二区免费| 亚洲精品久久久| 欧美丰满少妇人妻精品| 欧美日韩一区二区欧美激情| 肉肉视频在线观看| 日韩三级电影网站| 国产suv一区二区三区88区| 天天干天天操天天操| 久久91精品国产91久久跳| 国内精品久久久久久久影视简单 | 国产精品毛片高清在线完整版| 国产sm主人调教女m视频| 日av在线播放中文不卡| 中文字幕一区二区精品区| 这里只有久久精品| 精品国产免费一区二区三区香蕉| 日韩一区二区三区免费视频|