• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Nodejs進階:基于express+multer的文件上傳實例

    來源:懂視網 責編:小采 時間:2020-11-27 20:28:59
    文檔

    Nodejs進階:基于express+multer的文件上傳實例

    Nodejs進階:基于express+multer的文件上傳實例:概覽圖片上傳是web開發中經常用到的功能,node社區在這方面也有了相對完善的支持。常用的開源組件有multer、formidable等,借助這兩個開源組件,可以輕松搞定圖片上傳。本文主要講解以下內容,后續章節會對技術實現細節進行深入挖掘。基礎例子:借助expr
    推薦度:
    導讀Nodejs進階:基于express+multer的文件上傳實例:概覽圖片上傳是web開發中經常用到的功能,node社區在這方面也有了相對完善的支持。常用的開源組件有multer、formidable等,借助這兩個開源組件,可以輕松搞定圖片上傳。本文主要講解以下內容,后續章節會對技術實現細節進行深入挖掘。基礎例子:借助expr

    概覽

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

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

    本文主要講解以下內容,后續章節會對技術實現細節進行深入挖掘。

    基礎例子:借助express、multer實現單圖、多圖上傳。

    常用API:獲取上傳的圖片的信息。

    進階使用:自定義保存的圖片路徑、名稱。

    環境初始化

    非常簡單,一行命令。

    npm install express multer multer --save

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

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

    基礎例子:單圖上傳

    app.js。

    var fs = require('fs');
    var express = require('express');
    var multer = require('multer')
     
    var app = express();
    var upload = multer({ dest: 'upload/' });
     
    // 單圖上傳
    app.post('/upload', upload.single('logo'), function(req, res, next){
     res.send({ret_code: '0'});
    });
     
    app.get('/form', function(req, res, next){
     var form = fs.readFileSync('./form.html', {encoding: 'utf8'});
     res.send(form);
    });
     
    app.listen(3000);

    form.html。

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

    運行服務。

    node app.js

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

    基礎例子:多圖上傳

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

    app.js。

     
    var fs = require('fs');
    var express = require('express');
    var multer = require('multer')
     
    var app = express();
    var upload = multer({ dest: 'upload/' });
     
    // 多圖上傳
    app.post('/upload', upload.array('logo', 2), function(req, res, next){
     res.send({ret_code: '0'});
    });
     
    app.get('/form', function(req, res, next){
     var form = fs.readFileSync('./form.html', {encoding: 'utf8'});
     res.send(form);
    });
     
    app.listen(3000);

    form.html。

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

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

    獲取上傳的圖片的信息

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

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

    還是單文件上傳的例子,此時,multer會將文件的信息寫到 req.file 上,如下代碼所示。

    app.js。

    var fs = require('fs');
    var express = require('express');
    var multer = require('multer')
     
    var app = express();
    var upload = multer({ dest: 'upload/' });
     
    // 單圖上傳
    app.post('/upload', upload.single('logo'), function(req, res, next){
     var file = req.file;
     
     console.log('文件類型:%s', file.mimetype);
     console.log('原始文件名:%s', file.originalname);
     console.log('文件大小:%s', file.size);
     console.log('文件保存路徑:%s', file.path);
     
     res.send({ret_code: '0'});
    });
     
    app.get('/form', function(req, res, next){
     var form = fs.readFileSync('./form.html', {encoding: 'utf8'});
     res.send(form);
    });
     
    app.listen(3000);

    form.html。

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

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

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

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

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

    自定義本地保存的路徑

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

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

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

    自定義本地保存的文件名

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

    使用注意事項如下:

    destination:設置資源的保存路徑。注意,如果沒有這個配置項,默認會保存在 /tmp/uploads 下。此外,路徑需要自己創建。

    filename:設置資源保存在本地的文件名。

    app.js。

    var fs = require('fs');
    var express = require('express');
    var multer = require('multer')
     
    var app = express();
     
    var createFolder = function(folder){
     try{
     fs.accessSync(folder);
     }catch(e){
     fs.mkdirSync(folder);
     }
    };
     
    var uploadFolder = './upload/';
     
    createFolder(uploadFolder);
     
    // 通過 filename 屬性定制
    var storage = multer.diskStorage({
     destination: function (req, file, cb) {
     cb(null, uploadFolder); // 保存的路徑,備注:需要自己創建
     },
     filename: function (req, file, cb) {
     // 將保存文件名設置為 字段名 + 時間戳,比如 logo-1478521468943
     cb(null, file.fieldname + '-' + Date.now());
     }
    });
     
    // 通過 storage 選項來對 上傳行為 進行定制化
    var upload = multer({ storage: storage })
     
    // 單圖上傳
    app.post('/upload', upload.single('logo'), function(req, res, next){
     var file = req.file;
     res.send({ret_code: '0'});
    });
     
    app.get('/form', function(req, res, next){
     var form = fs.readFileSync('./form.html', {encoding: 'utf8'});
     res.send(form);
    });
     
    app.listen(3000);

    form.html。

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

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

    寫在后面

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

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Nodejs進階:基于express+multer的文件上傳實例

    Nodejs進階:基于express+multer的文件上傳實例:概覽圖片上傳是web開發中經常用到的功能,node社區在這方面也有了相對完善的支持。常用的開源組件有multer、formidable等,借助這兩個開源組件,可以輕松搞定圖片上傳。本文主要講解以下內容,后續章節會對技術實現細節進行深入挖掘。基礎例子:借助expr
    推薦度:
    標簽: js 示例 進階
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产成人精品免费视频大全| 2048亚洲精品国产| 国产精品午睡沙发系列| 久久精品无码一区二区三区免费| 久久99国产精品99久久| 久热这里只有精品12| 青青草97国产精品免费观看| 97久久精品人人做人人爽| 国产精品免费无遮挡无码永久视频| 亚洲精品色婷婷在线影院| 久久国产精品波多野结衣AV| 91精品国产人成网站| 国内精品一级毛片免费看| 精品国产一区二区三区无码| 在线精品亚洲| 亚洲国产主播精品极品网红| 精品久久久久久无码人妻热| 国产成人精品久久亚洲高清不卡 | 国产亚洲精品观看91在线| 国产精品视频二区不卡| 久久精品国产亚洲av高清漫画 | 国产91精品黄网在线观看| 国产精品影音先锋| 国产精品你懂的| 国产精品天天影视久久综合网| HEYZO无码综合国产精品227| 精品永久久福利一区二区| 久久精品国产亚洲AV无码麻豆| 亚洲精品国产精品乱码不99| 亚洲精品无码日韩国产不卡?V| 热RE99久久精品国产66热| 亚洲精品国产成人影院| 欧美日韩精品在线观看| 精品一区二区三区在线视频| 久久精品国产第一区二区三区| 欲帝精品福利视频导航| 日韩精品在线播放| 亚洲性日韩精品国产一区二区 | 国产精品视频第一页| 999成人精品视频在线| 九九热在线精品视频|