#mysql #node.js #express #formidable
#mysql #node.js #экспресс #впечатляющий
Вопрос:
У меня есть node.js приложение, которое загружает изображения и сохраняет их в папке с именем uploads
.
Я хочу сохранить URL-адрес изображения внутри базы данных mysql, а затем отобразить все изображения, которые были загружены с помощью html.
Я использую formidable
для загрузки изображений.
app.get('/upload', function (req, res){
res.sendFile(__dirname '/index.html');
});
app.post('/up', function (req, res){
var form = new formidable.IncomingForm();
form.parse(req);
form.on('fileBegin', function (name, file){
file.path = __dirname '/uploads/' file.name;
});
form.on('file', function (name, file) {
console.log('Uploaded ' file.name);
connection.query('SELECT * FROM images', (err, results) => {
// Throw error if find function fails
if (err) return (new Error(err));
// Throw error if there is already a file with that name
if (results[0]) return (new Error('File with that name already exists, please choose another name'));
connection.query('INSERT INTO images', (error, results) => {
// Throw error if save function fails
if (err) return (new Error(err));
// Throw error if you cannot verifty the save occured.
if (results.affectedRows !== 1) return (new Error('There was an unexpected error. Please try again'));
// Send Log to signal successfull upload
console.log('Uploaded ' file.name);
});
});
});
});
Ответ №1:
Самым простым способом было бы просто сохранить URL изображения в этой функции:
form.on('file', function (name, file){
console.log('Uploaded ' file.name);
});
В зависимости от того, как вы подключаетесь к своей базе данных, синтаксис должен выглядеть примерно так:
form.on('file', function (name, file){
database.find({file: file.path}, (err, result) => {
// Throw error if find function fails
if(err) return(new Error(err));
// Throw error if there is already a file with that name
if(result) return(new Error('File with that name already exists, please choose another name'));
database.save({file: file.path}, (err, result) => {
// Throw error if save function fails
if(err) return(new Error(err));
// Throw error if you cannot verifty the save occured.
if(result.count !== 1) return(new Error('There was an unexpected error. Please try again'));
// Send Log to signal successfull upload
console.log('Uploaded ' file.name);
});
});
});
РЕДАКТИРОВАНИЕ # 1:
В MySQL это выглядело бы примерно так:
form.on('file', function (name, file){
connection.query('SQL SELECT QUERY HERE', (err, results) => {
// Throw error if find function fails
if(err) return(new Error(err));
// Throw error if there is already a file with that name
if(results[0]) return(new Error('File with that name already exists, please choose another name'));
connection.query('SQL INSERT QUERY HERE', (error, results) => {
// Throw error if save function fails
if(err) return(new Error(err));
// Throw error if you cannot verifty the save occured.
if(results.affectedRows !== 1) return(new Error('There was an unexpected error. Please try again'));
// Send Log to signal successfull upload
console.log('Uploaded ' file.name);
});
});
});
Комментарии:
1. я получаю сообщение об ошибке (ReferenceError: база данных не определена)
2. вам не нужно выполнять инструкцию insert, чтобы вставить URL-адрес в базу данных?
3. @IsaacBajada это был просто псевдокод, чтобы показать на высоком уровне, как будет выглядеть процесс, а не собственно SQL-запросы. Я обновил свой ответ, чтобы он немного больше соответствовал тому, что вы ищете.
4. я получаю сообщение об ошибке (TypeError: не удается прочитать свойство ‘affectedRows’ неопределенного значения), я обновил свой вопрос. большое спасибо, чувак