為了測試圖片上傳插件的上傳功能是否好用,最近嘗試搭建了一個接收圖片的服務器,因為圖片上傳的編碼格式是form-data,所以我選擇使用express+multer,實現過程中發現有幾個需要注意的地方,在這里和大家分享下。
1 引入express和multer
這里沒什么好說的,安裝好包文件后,引入文件。
var express = require('express'),
multer = require('multer');
2 設置圖片的存儲路徑
multer方法接受一個options對象,其中就有一項dest用來設置存儲路徑的。這里有些同學可能會遇到疑問,發現自己使用dest接收的圖片文件打不開,都是一串不知名的文件,如下圖。

如果我們在后台把接收的文件對象打印出來,會發現這是因為沒有為文件制定后綴名。

如果我們想進行更完整的定制,需要使用diskstorage方法,具體代碼如下。
var app = express();
var storge = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads')
},
filename: function (req, file, cb) {
var fileformat = (file.originalname).split('.');
cb(null, file.fieldname+'-'+Date.now()+'.'+fileformat[fileformat.length-1]);
}
})
這樣我們接收到的圖片就會有后綴名了。


3 處理請求
express的路由方式很簡便,代碼如下
app.post('/', upload.array('files',20), function (req, res, next) {
console.log(req.files);
res.send('img received');
})
這里需要注意的地方就是app.post方法的參數,第一個參數是客戶端請求的路徑,比如表單的action屬性是'/',那這里的第一個參數就應該設置為'/',第二個參數也要注意,array方法的第一個參數是客戶端表單的name屬性,比如表單input元素的name屬性是'files',這里就應該設置為‘files’,否則會報錯如下信息。

4 總結
multer的使用方法主要需要注意兩個地方,一是設置路徑的同時需要設置后綴名,二是處理請求的時候,需要對應字段的name屬性。下面附上完整代碼。
var express = require('express'),
multer = require('multer');
var app = express();
var storge = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads')
},
filename: function (req, file, cb) {
var fileformat = (file.originalname).split('.');
cb(null, file.fieldname+'-'+Date.now()+'.'+fileformat[fileformat.length-1]);
}
})
var upload = multer({storage: storge})
app.use(express.static('./static'));
app.post('/', upload.array('file',20), function (req, res, next) {
console.log(req.files);
res.send('abc');
})
app.listen(3000)
5 參考目錄
https://github.com/expressjs/multer
http://www.cnblogs.com/chyingp/p/express-multer-file-upload.html
https://segmentfault.com/q/1010000005644324
