Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nodejsmysql插入Blob_Mysql_Node.js_Blob - Fatal编程技术网

nodejsmysql插入Blob

nodejsmysql插入Blob,mysql,node.js,blob,Mysql,Node.js,Blob,我需要一点帮助 使用NodeJS和MySQL blob插入 下面是我正在使用的代码片段 fs.open(temp_path, 'r', function (status, fd) { if (status) { console.log(status.message); return; } var buffer = new Buffer(getFilesizeInBytes(temp_path)); fs.read(fd, buffe

我需要一点帮助 使用NodeJS和MySQL blob插入

下面是我正在使用的代码片段

fs.open(temp_path, 'r', function (status, fd) {
    if (status) {
        console.log(status.message);
        return;
    }
    var buffer = new Buffer(getFilesizeInBytes(temp_path));
    fs.read(fd, buffer, 0, 100, 0, function (err, num) {
    var query ="INSERT INTO `files` (`file_type`, `file_size`, `file`) VALUES ('img', " + getFilesizeInBytes(temp_path) + ",'" + buffer + "' );";
    mySQLconnection.query(query, function (er, da) {
   if (er)throw er;
   });
  });
});
查询将文件插入表中,我得到了正确的文件大小,但是当我尝试 要检索文件并打开它(例如PDF文件),我会收到一条消息说 文件已损坏

从文件读取缓冲区时,我一定出了问题。

尝试替换:

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


您可能还希望将
文件:buffer
更改为
文件:buffer.slice(0,100)
,因为您只读取文件的前100个字节。如果
buffer.length>100
,那么在
buffer

中的前100个字节之后,您可能会得到一堆额外的垃圾字节。谢谢mscdex提供的代码片段

问题是,正如您指出的,我只读取了前100个字节的数据。 顺便说一句,感谢您提供的代码片段,以下是完整的解决方案。 希望它能帮助别人:-)


对于小文件,您可以尝试以下代码:

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
    }
})

尝试使用multer缓冲区:

let query = "UPDATE yourtable SET image=? WHERE id = '1'"
let obj = req.file.buffer;
conn.query(query, obj, function (err, rows, fields) {})

不能将缓冲区连接到查询中。事实上,您永远不应该将任何内容连接到查询中。如何插入Blob完全取决于您使用的MySQL库。你能告诉我们吗?
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
    }
})
let query = "UPDATE yourtable SET image=? WHERE id = '1'"
let obj = req.file.buffer;
conn.query(query, obj, function (err, rows, fields) {})