Nodejs ПУБЛИКУЕТ ФАЙЛ

#javascript #html #node.js

#javascript #HTML #node.js

Вопрос:

Я пытаюсь загрузить файл с веб-страницы на свой сервер, но ничего не происходит. Вот что я сделал:

Вот форма из html-файла:

 <form action="/api/bulk" method="POST" enctype="multipart/form-data">
    <div style="width: 200px">
        <input
            type="file"
            id="user_group_logo"
            class="custom-file-input"
            accept=".xlsx, .xls, .csv"
            name="file"
        />
        <label id="user_group_label" for="user_group_logo">
            <i class="fas fa-upload"></i>amp;nbsp;Choose a file...
        </label>
        <button class="btn btn-primary" type="submit">Upload</button>
        <div class="text-center"></div>
        <div class="text-center mt-2"></div>
    </div>
</form>
  

вот маршрутизация:

 router.route('/api/bulk').post(modelController.postBulk);
  

и вот метод контроллера, который должен загружать файл в папку / uploads

 var multer = require('multer');

const storage = multer.diskStorage({
    destination: './uploads',
});

const upload = multer({
    storage: storage,
});


exports.postBulk = async (req, res) => {
    try {
        console.log('test');
        upload(req, res, (err) => {
            if (err) {
                console.log('error');
            } else {
                console.log(req.file);
                res.send('test-req.file');
            }
        });
    } catch (err) {
        res.status(404).json({
            status: 'fail',
            message: err.message,
            attention: 'Cannot verify the CSV file. Call support!',
        });
    }
};
  

Я не получаю ни одного сообщения в консоли, поэтому метод каким-то образом не «доступен» (я должен получить «тест», когда я пытаюсь загрузить файл, по крайней мере).
Какие-нибудь идеи, пожалуйста?

Комментарии:

1. что вы получаете в качестве ответа на стороне клиента?

2. @JayadeepKM, если вы имеете в виду это: ibb.co/CQY2F5S

3. Глядя на npmjs.com/package/multer похоже, вам нужно будет вызвать upload.single() или одну из других функций объекта upload. Однако я не знаком с использованием узла на сервере.

4. @BogdanDoncea похоже, что клиент делает запрос GET вместо POST. Вы должны отлаживать клиентский код. На стороне сервера все в порядке

Ответ №1:

Попробуйте это

 const express = require('express');
const router = express.Router();

const multer = require('multer');

const storage = multer.diskStorage({
    destination: './uploads',
});

const upload = multer({
    storage: storage,
});

const postBulk = async (req, res) => {
    try {
        console.log(req.file);
        req.status(200).json({})
    } catch (err) {
        res.status(404).json({
            status: 'fail',
            message: err.message,
            attention: 'Cannot verify the CSV file. Call support!',
        });
    }
};

router.post(`/api/bulk`, upload.single('file'), postBulk);  

Комментарии:

1. Я пробовал, но ничего не происходит. Мой метод «postBulk», похоже, не вызывается. Я помещаю «console.log (‘test’)» в try-catch, и он не отображается в консоли при загрузке файла, поэтому, я думаю, должна быть другая проблема

Ответ №2:

попробуйте это

 router.route('/api/bulk').post(upload.single('file'),modelController.postBulk);
  

загрузка — это ваша постоянная конфигурация
для хранения.single предназначен для загрузки одного файла, а .array — для загрузки нескольких файлов.
пожалуйста, проверьте запрос.файл внутри вашего контроллера, чтобы получить файл, загруженный через форму

Комментарии:

1.Я пробовал, но ничего не происходит. Мой метод «postBulk», похоже, не вызывается. Я помещаю «console.log (‘test’)» в try-catch, и он не отображается в консоли при загрузке файла, поэтому, я думаю, должна быть другая проблема