use*_*670 7 mysql blob node.js
我需要一些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;
});
});
});
Run Code Online (Sandbox Code Playgroud)
查询在表中插入文件,我得到正确的文件大小,但当我尝试检索文件并打开它(例如PDF文件)时,我收到一条消息,说明该文件已损坏.
我必须在从文件中读取缓冲区时出错.
msc*_*dex 10
尝试更换:
var query ="INSERT INTO `files` (`file_type`, `file_size`, `file`) VALUES ('img', " + getFilesizeInBytes(temp_path) + ",'" + buffer + "' );";
mySQLconnection.query(query, function (er, da) {
Run Code Online (Sandbox Code Playgroud)
有:
var query = "INSERT INTO `files` SET ?",
values = {
file_type: 'img',
file_size: buffer.length,
file: buffer
};
mySQLconnection.query(query, values, function (er, da) {
Run Code Online (Sandbox Code Playgroud)
您可能还想更改file: buffer为,file: buffer.slice(0, 100)因为您只读取文件的前100个字节.如果buffer.length > 100那么你可能会在前100个字节之后得到一堆额外的垃圾字节buffer.
谢谢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;
});
});
});
Run Code Online (Sandbox Code Playgroud)