Не удается POST / загрузить при попытке загрузить файл на сервер. Multer - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь загрузить файл на свой сервер через промежуточное программное обеспечение для нескольких серверов, но сервер отвечает мне сообщением: Невозможно POST / upload

Мой бэкэнд-код (о группах и запросах):

import multer from 'multer';

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});
let storage = multer.diskStorage({
    destination: (req, file, cb) =>{
        cb(null, './uploads')
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now())
    }
})

let upload = multer({ storage: storage }).single('file');

app.post('/upload', (req, res) => {
    upload(req, res, (err) =>{
        if (err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
});

И моя форма внешнего интерфейса:

<form method="post" encType="multipart/form-data" action="/upload">
    <input type="file" name="file" />
     <input type="submit" value="Submit" />
</form>

Я также попытался сделать запрос через Почтальон и получил ту же ошибку. Может быть, из-за политики Cors? Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Вы должны передать upload в качестве промежуточного программного обеспечения непосредственно в определении вашего почтового маршрута, например:

let upload = multer({ storage: storage }).single('file');

app.post('/upload', upload, (req, res) => {
        res.end("File is uploaded");
});

upload - это промежуточное программное обеспечение, и оно должно быть в списке промежуточного программного обеспечения, которое выполняется во времяпроцесс /upload запрос

0 голосов
/ 20 октября 2019

Теперь мой внутренний код:

let storage = multer.diskStorage({
    destination: (req, file, cb) =>{
        cb(null, './uploads')
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now())
    }
})

let upload = multer({ storage: storage }).single('file');

app.post('/upload', upload, (req, res) => {
    res.end("File is uploaded");
});

, но я получаю ту же ошибку в браузере, в почтальоне у меня есть:

MulterError: Unexpected field
    at wrappedFileFilter (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\multer\index.js:40:19)
    at Busboy.<anonymous> (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\multer\lib\make-middleware.js:114:7)
    at Busboy.emit (events.js:203:13)
    at Busboy.EventEmitter.emit (domain.js:471:20)
    at Busboy.emit (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\busboy\lib\main.js:38:33)
    at PartStream.<anonymous> (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\busboy\lib\types\multipart.js:213:13)
    at PartStream.emit (events.js:203:13)
    at PartStream.EventEmitter.emit (domain.js:471:20)
    at HeaderParser.<anonymous> (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\dicer\lib\Dicer.js:51:16)
    at HeaderParser.emit (events.js:203:13)
    at HeaderParser.EventEmitter.emit (domain.js:471:20)
    at HeaderParser._finish (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\dicer\lib\HeaderParser.js:68:8)
    at SBMH.<anonymous> (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\dicer\lib\HeaderParser.js:40:12)
    at SBMH.emit (events.js:203:13)
    at SBMH.EventEmitter.emit (domain.js:471:20)
    at SBMH._sbmh_feed (C:\Users\MAISTER\Desktop\shopping cart\shopping\backend\node_modules\streamsearch\lib\sbmh.js:159:14)
...