我需要一些帮助 使用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文件)我收到一条消息说 文件已损坏。
我必须在从文件中读取缓冲区时出错。
答案 0 :(得分:8)
尝试更换:
var query ="INSERT INTO `files` (`file_type`, `file_size`, `file`) VALUES ('img', " + getFilesizeInBytes(temp_path) + ",'" + buffer + "' );";
mySQLconnection.query(query, function (er, da) {
使用:
var query = "INSERT INTO `files` SET ?",
values = {
file_type: 'img',
file_size: buffer.length,
file: buffer
};
mySQLconnection.query(query, values, function (er, da) {
您可能还想将file: buffer
更改为file: buffer.slice(0, 100)
,因为您只读取文件的前100个字节。如果buffer.length > 100
那么你可能会在buffer
的前100个字节之后得到一堆额外的垃圾字节。
答案 1 :(得分:4)
感谢mscdex的代码片段。
问题在于你指出我只读取前100个字节的数据。 顺便说一句,谢谢你的代码片段,以及整个解决方案。 希望它可以帮助某人: - )
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;
});
});
});
答案 2 :(得分:0)
对于小文件,您可以尝试以下代码:
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
}
})
答案 3 :(得分:0)
尝试使用multer缓冲区:
let query = "UPDATE yourtable SET image=? WHERE id = '1'"
let obj = req.file.buffer;
conn.query(query, obj, function (err, rows, fields) {})