日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Nodejs進階:基于express+multer的文件上傳

概覽

成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計介紹好的網(wǎng)站是理念、設(shè)計和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)建站擁有的網(wǎng)站設(shè)計理念、多方位的設(shè)計風(fēng)格、經(jīng)驗豐富的設(shè)計團隊。提供PC端+手機端網(wǎng)站建設(shè),用營銷思維進行網(wǎng)站設(shè)計、采用先進技術(shù)開源代碼、注重用戶體驗與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。

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

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

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

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

關(guān)于作者

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

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

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

環(huán)境初始化

非常簡單,一行命令。

 
 
  1. npm install express multer multer --save 

每個示例下面,都有下面兩個文件

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

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

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.  
  2.     

    單圖上傳

     
  3.      
  4.      
  5.   

運行服務(wù)。

 
 
  1. node app.js 

訪問 http://127.0.0.1:3000/form ,選擇圖片,點擊“提交”,done。然后,你就會看到 upload 目錄下多了個圖片。

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

代碼簡直不能更簡單,將前面的 upload.single('logo') 改成 upload.array('logo', 2) 就行。表示:同時支持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.  
  2.     

    多圖上傳

     
  3.      
  4.      
  5.      
  6.   

同樣的測試步驟,不贅述。

獲取上傳的圖片的信息

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

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

還是單文件上傳的例子,此時,multer會將文件的信息寫到 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('文件類型:%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.  
  2.     

    單圖上傳

     
  3.      
  4.      
  5.   

啟動服務(wù),上傳文件后,就會看到控制臺下打印出的信息。

 
 
  1. 文件類型:image/png 
  2. 原始文件名:1.png 
  3. 文件大?。?8379 
  4. 文件保存路徑:upload/b7e4bb22375695d92689e45b551873d9  

自定義文件上傳路徑、名稱

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

自定義本地保存的路徑

非常簡單,比如我們想將文件上傳到 my-upload 目錄下,修改下 dest 配置項就行。

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

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

自定義本地保存的文件名

代碼稍微長一點,單同樣簡單。multer 提供了 storage 這個參數(shù)來對資源保存的路徑、文件名進行個性化設(shè)置。

使用注意事項如下:

  • destination:設(shè)置資源的保存路徑。注意,如果沒有這個配置項,默認(rèn)會保存在 /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. // 通過 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è)置為 字段名 + 時間戳,比如 logo-1478521468943 
  26.         cb(null, file.fieldname + '-' + Date.now());   
  27.     } 
  28. }); 
  29.  
  30. // 通過 storage 選項來對 上傳行為 進行定制化 
  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.  
  2.     

    單圖上傳

     
  3.      
  4.      
  5.   

測試步驟不贅述,訪問一下就知道效果了。

寫在后面

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


網(wǎng)頁名稱:Nodejs進階:基于express+multer的文件上傳
文章鏈接:http://www.5511xx.com/article/cdddhjs.html