NodeJs 使用 multer 實現文件上傳

Multer 是一個 node.js 中間件,用於處理 multipart/form-data 類型的表單數據,它主要用於上傳文件node

注意: Multer 不會處理任何非 multipart/form-data 類型的表單數據express

使用方法:npm

安裝 Multer 微信

npm install multer --save

安裝 uuid (生成惟一標識,做爲文件名)函數

npm install uuid --save

保存圖片工具

var express = require('express')
var path = require('path')
var router = express.Router()
var multer = require('multer')
//uuid工具能夠生成惟一標示 須要安裝
var UUID = require('uuid')

//設置保存規則
var storage = multer.diskStorage({
    //destination:字段設置上傳路徑,能夠爲函數
    destination: path.resolve(__dirname, '../upload'),

    //filename:設置文件保存的文件名
    filename: function(req, file, cb) {
        let extName = file.originalname.slice(file.originalname.lastIndexOf('.'))
        let fileName = UUID.v1()
        cb(null, fileName + extName)
    }
})

//設置過濾規則(可選)
var imageFilter = function(req, file, cb){
    var acceptableMime = ['image/jpeg', 'image/png', 'image/jpg', 'image/gif']
    //微信公衆號只接收上述四種類型的圖片
    if(acceptableMime.indexOf(file.mimetype) !== -1){
        cb(null, true)
    }else{
        cb(null, false)
    }
}

//設置限制(可選)
var imageLimit = {
    fieldSize: '2MB'
}

//建立 multer 實例
var imageUploader = multer({ 
    storage: storage,
    fileFilter: imageFilter,
    limits: imageLimit
}).array('photos', 12)    //定義表單字段、數量限制

router.post('/image', imageUploader, function(req, res, next) {
    //req.files中保存文件信息,以下
    // [ { fieldname: 'photos',
    //    originalname: 'p8U85lWN0XyYcel_avatar_uploaded1439700817.69.jpg',
    //    encoding: '7bit',
    //    mimetype: 'image/jpeg',
    //    destination: 'E:\\mine\\wechat\\upload',
    //    filename: 'b585c040-0a6f-11e9-bbb6-fdcabd365420.jpg',
    //    path:
    //     'E:\\mine\\wechat\\upload\\b585c040-0a6f-11e9-bbb6-fdcabd365420.jpg',
    //    size: 16536 } ]
    console.log(req.files);
})
相關文章
相關標籤/搜索