使用 multer 上傳單個檔案
記得
- 建立用於上傳的資料夾(示例中為
uploads
)。 - 安裝 multer
npm i -S multer
server.js
:
var express = require("express");
var multer = require('multer');
var app = express();
var fs = require('fs');
app.get('/',function(req,res){
res.sendFile(__dirname + "/index.html");
});
var storage = multer.diskStorage({
destination: function (req, file, callback) {
fs.mkdir('./uploads', function(err) {
if(err) {
console.log(err.stack)
} else {
callback(null, './uploads');
}
})
},
filename: function (req, file, callback) {
callback(null, file.fieldname + '-' + Date.now());
}
});
app.post('/api/file',function(req,res){
var upload = multer({ storage : storage}).single('userFile');
upload(req,res,function(err) {
if(err) {
return res.end("Error uploading file.");
}
res.end("File is uploaded");
});
});
app.listen(3000,function(){
console.log("Working on port 3000");
});
index.html
:
<form id = "uploadForm"
enctype = "multipart/form-data"
action = "/api/file"
method = "post"
>
<input type="file" name="userFile" />
<input type="submit" value="Upload File" name="submit">
</form>
注意:
要上傳帶副檔名的檔案,你可以使用 Node.js 路徑內建庫
為此只需要 path
到 server.js
檔案:
var path = require('path');
並改變:
callback(null, file.fieldname + '-' + Date.now());
以下列方式新增副檔名:
callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
如何按擴充套件程式過濾上傳:
在此示例中,檢視如何上載檔案以僅允許某些擴充套件。
例如,僅影象副檔名。只需新增到 var upload = multer({ storage : storage}).single('userFile');
fileFilter 條件
var upload = multer({
storage: storage,
fileFilter: function (req, file, callback) {
var ext = path.extname(file.originalname);
if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
return callback(new Error('Only images are allowed'))
}
callback(null, true)
}
}).single('userFile');
現在,你只能上傳帶有 png
,jpg
,gif
或 jpeg
副檔名的影象檔案