【node】文件上傳功能簡易實現

找了很多文件上傳的相關模塊,最後選擇了比較經常使用,而且是express推薦使用的 multer 來實現文件上傳,附上 GitHub 地址php

1. 開始

開始第一步,天然就是安裝模塊,很少說前端

npm install multer --save

這裏簡單說一下,由於文件上傳是用 post 方法提交數據,因此上傳的單文件或者多文件會做爲一個 body 體添加到請求對象中,咱們能夠經過 req.file 或者 req.files 查看上傳後文件的相關信息。git

以單文件上傳爲例,req.file 返回一個對象:github

{
     "fieldname":"avatar",    #前端上傳文件input的name
     "originalname":"Wx.php",    #本地文件名
     "encoding":"7bit",    #文件編碼類型
     "mimetype":"text/php",    #文件類型
     "destination":"uploads/",    #上傳根目錄
     "filename":"1497286037422Wx.php",    #上傳後文件名
     "path":"uploads/1497286037422Wx.php",    #文件路徑
     "size":18174    #文件大小
}

該對象的 key 值是固定的,velue 值根據配置生成,用於實現相關邏輯express

2. 實現

實現分兩部分,前端和後端npm

前端

前端就是普通的寫法,form 表單提交segmentfault

<form action="/test/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="avatar">
    <input type="submit" name="提交">
</form>

切記,enctype="multipart/form-data" 這個屬性必定要加上,不然後臺接收不到文件。後端

後端

首先咱們新建配置文件,upload.jspost

// upload.js

var multer  = require('multer');    # 引入模塊

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/')
    },
    filename: function (req, file, cb) {
        cb(null, Date.now()+file.originalname)
    }
})

var upload = multer({ storage: storage })

module.exports = upload;

diskStorage方法至關於建立一個磁盤存儲引擎,配置文件上傳路徑,文件名等,可控性更高。ui

destination    # 設置文件上傳路徑
filename       # 重命名文件

而後新建路由接收文件,file.js

// file.js 

var express = require('express');
var router = express.Router();

// 引入配置文件
var upload = require('../config/upload');

router.post('/upload', upload.single('avatar'), function(req, res, next) {
    res.send(req.file);
});

module.exports = router;

file.js 中 upload.single() 方法表示接受單文件,經常使用的有

upload.single(fname);    // 接收單文件
upload.array(fname[, maxCount])    //接收多文件,maxCount表示接收最大數量

fname 是前端 <input type="file" name="fname">name

基本的上傳文件方法就這些了,固然還有不少的配置參數之類的設置,要參考 GitHub 說明,地址在開頭,須要者自行查閱


本文由 楊成功 原創,更多原創內容請到專欄 楊成功的全棧之路

相關文章
相關標籤/搜索