Как заставить веб-страницу помнить последний открытый каталог файлов?

У меня есть приложение для Windows на основе Qt WebEngineView (в QML). В моем приложении есть веб-страницы. Некоторым веб-страницам требуется, чтобы пользователь выбирал файлы, используя:

<input type="file" />

Я хочу знать, возможно ли, чтобы мое приложение запомнило последний пользователь каталога, выбравший файл?

Я пытался:

  • Установите для свойства value значение <input> на моей веб-странице, но браузер не может устанавливать его программно, см. Установить значение по умолчанию для формы входного файла.
  • Откройте мои веб-страницы в Chrome, Chrome может запомнить последний каталог. Но в моем приложении каждый раз открывается каталог, в котором установлено приложение.
  • В родном диалоговом окне «Открыть файл» я могу установить начальный каталог, но могу ли я сделать то же самое для диалогового окна «Открыть файл» на веб-страницах?

Я знаю, что это может быть невозможно. Любые предложения и обходные пути приветствуются.


person zhm    schedule 04.03.2017    source источник


Ответы (1)


Элемент WebEngineView имеет сигнал, когда веб-контент запрашивает файловый диалог.

Элемент FileDialog имеет свойство. для установки (и получения) папки.

Так что что-то в этом духе должно работать

FileDialog {
    id: dialog

    property var request

    onRejected: request.dialogReject()

    onAccepted: {
        yourSavedFolder = folder;

        request.dialogAccept(files);
    }
}

WebEngineView {
    onFileDialogRequested: {
        request.accepted = true; // inhibit default dialog

        dialog.request = request;
        dialog.folder = yourSavedFolder;
        dialog.open()
    }
}

Это всего лишь грубый набросок, вам также нужно будет обработать режим открытия объекта запроса и т. д.

person Kevin Krammer    schedule 04.03.2017
comment
Очень полезно! Примечание: 1. onFileDialogRequested требуется Qt 5.8. 2. request.dialogAccept(files); должно быть request.dialogAccept(fileUrl.toString()); (в режиме одиночного выбора) - person zhm; 04.03.2017