日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

概覽

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

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

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

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

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

關于作者

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

正在填坑:《Nodejs學習筆記》 / 《Express學習筆記》

社區(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 # 服務端代碼,用來處理文件上傳請求 
  3. ├── form.html # 前端頁面,用來上傳文件  

基礎例子:單圖上傳

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.   

運行服務。

 
 
  1. node app.js 

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

基礎例子:多圖上傳

代碼簡直不能更簡單,將前面的 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.   

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

獲取上傳的圖片的信息

很多時候,除了將圖片保存在服務器外,我們還需要做很多其他事情,比如將圖片的信息存到數(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.   

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

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

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

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

自定義本地保存的路徑

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

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

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

自定義本地保存的文件名

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

使用注意事項如下:

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

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.         // 將保存文件名設置為 字段名 + 時間戳,比如 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的基礎用法進行了介紹,并未涉及過多原理性的東西。俗話說 授人以漁不如授人以漁,在后續(xù)的章節(jié)里,會對文件上傳的細節(jié)進行挖掘,好讓讀者朋友對文件上傳加深進一步的認識。


分享題目:Nodejs進階:基于express+multer的文件上傳
鏈接URL:http://www.dlmjj.cn/article/cdddhjs.html