У меня возникли проблемы, пытаясь выяснить, как предотвратить загрузку Мультера файла, если запись уже добавлена в базу данных.Разбирайте данные мультипартийной формы, а затем загрузите файл с помощью модуля Multer (Node)
В моем сценарии у меня есть многостраничная форма, где вы можете добавить пиво, определяющее идентификатор. Он имеет 2 входа, один с текстовым вводом (id) и другой с файловым вводом (beerImage).
Что бы я хотел сделать, перед загрузкой файла проверьте, существует ли он в базе данных и, если нет, загрузите файл. В настоящее время мой код сначала загружает файл, а затем проверяет, существует ли он, и это плохо!
Вот мой код:
var express = require('express');
var router = express.Router();
var multer = require('multer');
var database = require('../services/database');
var upload = multer({ dest: 'uploads/' });
var cpUpload = upload.fields([{ name: 'beerImage', maxCount: 1 } ]);
router.route('/beers')
.post(function (req, res, next) {
// I'd like to use req.body.id in the query here, but it doesn't exist yet!
cpUpload(req, res, function (err) {
if (err) {
return next(new Error('Error uploading file: ' + err.message + ' (' + err.field + ')'));
} else {
database.getConnection().done(function (conn) {
conn.query('SELECT COUNT(*) AS beersCount FROM beers WHERE id=?', req.body.id, function (err, rows, fields) {
if (err) {
conn.release();
return next(err);
}
if (rows[0].beersCount > 0) {
conn.release();
return next(new Error('Beer "' + req.body.id + '" already exists!'));
} else {
delete req.body.beerImage;
conn.query('INSERT INTO beers SET ?', req.body, function (err, rows, fields) {
conn.release();
if (err) {
return next(err);
}
res.json({ message: 'Beer "' + req.body.id + '" added!' });
});
}
});
});
}
});
});
module.exports = router;
Я не могу найти способ первый «разбор» Мультисекционный данные формы (чтобы иметь возможность сделать запрос и проверить, если он существует, используя req.body.id), а затем решить, хочу ли я загрузить файл или нет. Кажется, что «cpUpload» делает обе вещи одновременно!
Любая идея о том, как сначала получить «req.body.id» (выполнить запрос), а затем решить, хочу ли я загрузить файл?
Это единственное решение, создающее временный файл? – Emi
Это безопасность для пользователей. Вы не можете получить доступ к файлу на стороне клиента. – Martial
Node.js запускается на сервере, и там есть где я хочу проверить, существует ли запись до ее сохранения. – Emi