上傳單個檔案的方法
1.在routes目錄下添加upload.js檔案(如果沒有multer子產品,則使用 npm install multer 來下載下傳)
upload.js
var router = require('express').Router();
var multer = require('multer');
var gFilename = "";
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './tmp'); //此目錄是項目根目錄下的tmp目錄,一定要確定此目錄存在,否則上傳失敗
},
filename: function (req, file, callback) {
gFilename = file.originalname;
callback(null, gFilename);
}
});
var upload = multer({storage: storage}).any();
router.post('/', function (req, res, next) {
res.setTimeout(25000, function () {
if (res.finished) {
return;
}
var rtRes = {
rstcode: "error",
desc: "system timeout",
data: {}
};
console.log("system response timeout");
res.writeHead(501, {"Content-Type": "text/html"});
res.write(JSON.stringify(rtRes));
res.end();
});
upload(req, res, function (err) {
if (res.finished) {
return;
}
var rst = {
rstcode: "error",
desc: "上傳失敗",
data: {filename: {}}
};
if (err) {
return res.end(JSON.stringify(rst));
}
rst.rstcode = "success";
rst.desc = "上傳成功";
rst.data.filename = gFilename;
res.end(JSON.stringify(rst));
});
});
module.exports = router;
2.在app.js檔案中引入upload檔案
var upload = require('./routes/upload');
app.use('/fileupload', upload);
3.測試表單
<form id="uploadForm" enctype="multipart/form-data" action="/fileupload" method="post">
<input type="file" name="filename"/>
<input type="submit" value="添加">
</form>
<!-- enctype="multipart/form-data"這句話的作用是将檔案以二進制的形式上傳,這樣可以實作多種類型的檔案上傳 -->
具體可以檢視node_modules目錄下的multer子產品中的README.md檔案,有詳細的介紹,這裡告訴大家一個小技巧,nodejs的每個子產品裡邊都有README.md檔案,是對該子產品的詳細介紹,以及該子產品如何使用(有小例子),非常友善