簡體   English   中英

無法使用 Multer 上傳多個文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM