Разъяснения по хранению изображений в базе данных sqlite с использованием nodejs и электрона - PullRequest
0 голосов
/ 26 мая 2019

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