使用nodejs和electronic

时间:2019-05-26 17:17:06

标签: node.js reactjs sqlite electron

因此,我一直在努力修改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;
     });

0 个答案:

没有答案