Python3 / JS - Как мне обрабатывать локальную загрузку файлов с помощью eel?

В настоящее время я работаю над локальным электронным программным обеспечением с Eel.

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

В этом программном обеспечении я хочу иметь возможность выбирать локальные файлы и работать с ними на сервере Python. Для доступа к файлу я использую HTML<form> с <input type='file' />.

Мне интересно, как я должен обрабатывать загрузку локальных файлов в этой структуре, поскольку, в отличие от электрона, нет dialog.showOpenDialog() функция доступна в ванильном JavaScript.

Следующий вопрос помогает другому пользователю Electron, но я искал обходной путь в ванильным ES6.

заранее спасибо

1 ответ

Решение

После того, как я поигрался с JS и HTML5 File API (и очень не смог получить ожидаемый результат), я вспомнил, что я парень Python.

Самое простое решение этой проблемы, которое пришло мне в голову, - позволить Python управлять файлами. Итак, вместо HTML<input type='file'>, Я создаю кнопку с функцией onclick JS:

<button type="button" onclick="getPathToFile()">Select File</button>


<script type="text/javascript">
    function getPathToFile() {
        eel.pythonFunction()(r => console.log(r);
    };
</script>

Тем временем я позволяю Python обрабатывать диалоговое окно файла на бэкэнде:

import wx
import eel

@eel.expose
def pythonFunction(wildcard="*"):
    app = wx.App(None)
    style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST
    dialog = wx.FileDialog(None, 'Open', wildcard=wildcard, style=style)
    if dialog.ShowModal() == wx.ID_OK:
        path = dialog.GetPath()
    else:
        path = None
    dialog.Destroy()
    return path

Затем в консоли JavaScript вы получите [1] path/to/selected/file.

Этот метод также позволяет вам выполнять действия с файлом, как если бы вы были в Python (анализировать, сохранять, изменять,...), и отображать информацию с помощью графического интерфейса пользователя HTML / CSS / JavaScript.
Довольно аккуратно.

Другие вопросы по тегам