[英]Can't upload multiple files using Multer
我無法在 Node.js 中使用 Multer 選擇和上傳多個文件。
我能夠在不同的練習中上傳單個文件而沒有任何問題,但現在我被困在多個上傳功能上。
我誤會了什么? 我怎樣才能讓用戶可以選擇和上傳多個文件? 感謝您的幫助。
這是我的表格:
<form class="form" action="/file" method="POST" encType="multipart/form-data">
<div class="box"></div>
<div class="form-group">
<label>
<input type='file' name="upload" class="form-control"/>
</label>
</div>
<input id="submit" type='submit' value="Submit" class="btn btn-primary"/>
</form>
我的后端代碼:
const express = require('express');
const bodyParser = require('body-parser');
const fileUpload = require('express-fileupload');
const multer = require('multer')
var fs = require('fs');
// SETUP PACKAGES
const path = require('path');
const app = express();
const upload = multer({ dest: 'uploads' }) ;
// SETUP MIDDLEWARE
app.use(bodyParser.urlencoded({ extended: false }));
app.use(fileUpload());
app.use(express.static(__dirname));
// DECLARE UPLOAD DIRECTORY
const uploadDirectory = __dirname + path.sep + 'uploads'
// DECLARE PROMISES
const writeFile = (name, body) => {
return new Promise((resolve, reject) => {
fs.writeFile(uploadDirectory + path.sep + name, body, (err) => {
if (err) {
console.error(err)
} else {
resolve(name)
}
})
}).then(readFile);
}
const readFile = (file) => {
return new Promise((resolve, reject) => {
fs.readFile(uploadDirectory + path.sep + file, 'utf8', (err, data) => {
if (err) {
console.error(err);
} else {
resolve(data)
}
})
})
}
app.get('/',(req,res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.post('/file', upload.array('upload', 5), (req, res) => {
if(req.files.upload instanceof Array){
for (var i = 0; i < req.files.upload.length; i ++ ){
let name = req.files.upload[i].name;
let data = req.files.upload[i].data;
let write = writeFile(name, data);
console.log(req.files.upload[i].name);
write.then(()=> res.end('fileS uploaded'))
.catch((e)=> res.status(500).send(e.message));
}
}else {
// let name = req.files.upload.name;
// let data = req.files.upload.data;
// writeFile(name, data)
// res.end("file uploaded")
}
});
app.listen(8080)
您沒有在輸入標簽中使用“multiple”屬性。 如果沒有指定,輸入字段會將您上傳的最后一個文件發送到后端,因此只會上傳一個文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.