【问题标题】:Uploading images and inserting the image url to mysql with node使用节点上传图片并将图片url插入mysql
【发布时间】:2019-03-13 22:19:03
【问题描述】:

我有一个 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);
            });
        });
    });
});

【问题讨论】:

    标签: mysql node.js express formidable


    【解决方案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);
            });
        });
    });
    

    【讨论】:

    • 我得到一个错误(ReferenceError:数据库未定义)
    • 不需要做insert语句把url插入数据库吗?
    • @IsaacBajada 这只是伪代码,以高级别显示流程的外观,而不是实际的 SQL 查询。我已经更新了我的答案,以便更多地与您正在寻找的内容相关联。
    • 我收到一个错误(TypeError: Cannot read property 'affectedRows' of undefined)我已经更新了我的问题。非常感谢
    猜你喜欢
    • 2017-04-08
    • 2013-11-16
    • 1970-01-01
    • 2018-03-22
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多