Итак, я возился с nodejs для хранения изображений в моей базе данных sqlite, мне удалось заставить его работать, но каким-то образом мне нужны некоторые пояснения или предложение о том, как обрабатывать файлы с nodejs, подключающимися к sqlite. Я до сих пор не рефракторил код, но, пожалуйста, потерпите его.
После выбора файла 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;
});