NodeJS mySQL Insert Blob

后端 未结 4 1103
别跟我提以往
别跟我提以往 2020-12-20 17:03

I need a little help with NodeJS and MySQL blob insertion.

Here\'s the code snippet i\'m using

fs.open(temp_path, \'r\', function (status, fd) {
             


        
相关标签:
4条回答
  • 2020-12-20 17:45

    Thank you mscdex for the snippet.

    The problem was as you pointed out that i was reading only first 100 bytes of data. BTW thank you for the snippet and here's the whole solution. Hope it can help someone :-)

    fs.open(temp_path, 'r', function (status, fd) {
        if (status) {
            console.log(status.message);
            return;
        }
        var fileSize = getFilesizeInBytes(temp_path);
        var buffer = new Buffer(fileSize);
        fs.read(fd, buffer, 0, fileSize, 0, function (err, num) {
    
            var query = "INSERT INTO files SET ?",
                values = {
                    file_type: 'img',
                    file_size: buffer.length,
                    file: buffer
                };
            mySQLconnection.query(query, values, function (er, da) {
                if(er)throw er;
            });
    
        });
    });
    
    0 讨论(0)
  • 2020-12-20 17:52

    Try replacing:

    var query ="INSERT INTO `files` (`file_type`, `file_size`, `file`) VALUES ('img', " + getFilesizeInBytes(temp_path) + ",'" + buffer + "' );";
    mySQLconnection.query(query, function (er, da) {
    

    with:

    var query = "INSERT INTO `files` SET ?",
        values = {
          file_type: 'img',
          file_size: buffer.length,
          file: buffer
        };
    mySQLconnection.query(query, values, function (er, da) {
    

    You may also want to change file: buffer to file: buffer.slice(0, 100) since you are only reading the first 100 bytes of the file. If buffer.length > 100 then you may end up with a bunch of extra garbage bytes after the first 100 bytes in buffer.

    0 讨论(0)
  • 2020-12-20 18:01

    For the small files, you can try below code:

    var fileInsertSQL = "insert ignore into File(id, content, creationTime) values(?,?,?)";
    db.query(fileInsertSQL, ["id1", fs.readFileSync(filepath), new Date().getTime()], function (err, dbRes) {
        if(err){
            console.error(err);
        } else {
            //Do something
        }
    })
    
    0 讨论(0)
  • 2020-12-20 18:05

    try using multer buffer:

    let query = "UPDATE yourtable SET image=? WHERE id = '1'"
    let obj = req.file.buffer;
    conn.query(query, obj, function (err, rows, fields) {})
    
    0 讨论(0)
提交回复
热议问题