#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, и он не отображается в консоли при загрузке файла, поэтому, я думаю, должна быть другая проблема