скопировать выбранный файл из ввода в форме электронного приложения - PullRequest
0 голосов
/ 14 марта 2020

У меня есть эта форма

<form>
  <input type="file" name="idp" id="idp" onchange="uploadFiles();"/>
</form>

Когда пользователь выбирает картинку, мне нужно скопировать ее в указанную папку и сохранить ее полное имя в переменной, чтобы сохранить ее в базе данных.

Я пробовал этот код:

const electron = require('electron');
const { dialog } = electron;    // electron.remote; (if in renderer process)
const fs = require('fs');       // module that interacts with the file system
const path = require("path"); 
function uploadFiles(){
    // opens a window to choose file
    dialog.showOpenDialog({properties: ['openFile']}).then(result => {

        // checks if window was closed
        if (result.canceled) {
            console.log("No file selected!")
        } else {

            // get first element in array which is path to file selected
            const filePath = result.filePaths[0];

            // get file name
            const fileName = path.basename(filePath);

            // path to app data + fileName = "C:\Users\John\AppData\Roaming\app_name\picture.png"
            imgFolderPath = path.join(app.getPath('userData'), fileName);

            // copy file from original location to app data folder
            fs.copyFile(filePath, imgFolderPath, (err) => {
                if (err) throw err;
                console.log(fileName + ' uploaded.');
            });
        }
    });
};

и на консоли выдается следующее сообщение об ошибке:

Uncaught TypeError: Cannot read property 'showOpenDialog' of undefined
    at uploadFiles 
    at HTMLInputElement.onchange

1 Ответ

1 голос
/ 14 марта 2020
const { dialog } = electron;    // electron.remote; (if in renderer process)

Похоже, что вы вызываете это из renderer процесса. Поэтому вам нужно использовать electron.remote для доступа к модулю dialog (как показывает пример кода, который вы используете выше).

Стоит потратить время на чтение процессов main и renderer в Electron - это фундаментальные концепции, с которыми вы будете сталкиваться снова и снова, и они особенно важны в IP C обмен сообщениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...