因此,我一直在努力修改nodejs来将图像存储在我的sqlite数据库中,但我设法使其正常工作,但是我需要以某种方式对如何使用连接到sqlite的nodejs处理文件进行澄清或建议。我仍然没有修改代码,但请忍受。
我所做的是选择文件后,ipcRenderer会将文件发送到后端(ipcMain)以创建一个临时图像,然后可以访问该图像进行预览。我还将返回到前端的数据将以base64格式另存为字符串形式的状态,以便我可以将其保存在sqlite中(我曾尝试使用文件对象进行查询,但它不起作用或只是不知道)。
选择文件
uploadFile(event) {
let file = event.target.files[0];
console.log(file);
if (file) {
ipcRenderer.send('uploadFile', [file.path, file.name, file]);
console.log(file);
ipcRenderer.on('asynchronous-reply', async (event, arg) => {
let data = await arg;
this.setState({
isImageReady: true,
image: data.toString('base64'),
})
})
// axios.post('/files', data)...
}
}
创建临时图像
ipcMain.on('uploadFile', (event, arg) => {
fs.writeFile('./src/assets/temp.png', '', (err) => {return null});
fs.readFile(arg[0], (err, data) => {
if(err){
console.log(err);
}
console.log(data);
fs.writeFile('./src/assets/temp.png', data, (err) => {
event.reply('asynchronous-reply', data);
console.log("The file was succesfully saved!");
});
});
})
预览图像
previewImage(event) {
if(!this.state.isImageReady){
let e = document.querySelector('.fileInput');
e.style.boxShadow = "inset 0 0 0 1px red"
setTimeout(() => {
e.style.boxShadow = `inset 0 0 0 1px ${theme[ct].inputBorder}`
}, 1000);
return;
}
this.setState({
isImageFinal: true,
})
let doc = document.querySelector('.changeImagePreview');
doc.src = require('../../assets/temp.png');
}
发送数据以构建查询
let queryData = {
type: 'add',
table: stmt.table.user.table,
col: [
stmt.table.user.name,
stmt.table.user.password,
stmt.table.user.sleep,
stmt.table.user.companion,
stmt.table.user.image,
],
value: [
this.state.name,
this.state.pass,
this.state.sleep,
this.state.companion,
this.state.image,
],
}
let x = ipcRenderer.sendSync('runQuery', queryData);
应用构造的查询
await db.all(q, [], (err, rows) => {
if (err) {
mes(3, err.message);
}
mes(1, "Query succesfully applied");
// get the last insert id
rows.forEach(element => {
});
event.returnValue = rows;
});