如何打开文件对话框以选择鳗鱼中的下载目的地?

How to open files dialogue box to choose download destination in eel?

我知道在 tkinter 中可以打开文件对话框,但是有没有办法在 eel 中使用 python 或者甚至在 javascript 中做到这一点,以便下载位置可以是获取而不是硬编码每次都更改目录。

我使用了 python,

的 PyTube 库
from pytube import YouTube
link = input(" Enter YouTube video URL: ")
video = YouTube(link)
stream = video.streams.get_highest_resolution()
stream.download('local path')

我使用前端技术创建了前端,它只有一个粘贴框 url 和一个提交按钮。 单击提交按钮后,我希望 chrome 显示一个对话框以选择下载位置以将其传递到 stream.download('local path')

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Downloader</title>
    <link rel="stylesheet" href="main.css">
</head>

<body>
    
    <div class="container">
        <h1>Downloader</h1>
        <div class="line"></div>
        <form action="">
            <label for="">Enter YouTube video URL</label>
            <input type="text" class="youtubeUrl" placeholder="Paste the URL here">
            <button>Download</button>
        </form>
    </div>

</body>
</html>

没有向表单提供任何 class,因为它将成为网络应用程序中的唯一表单。

使用纯 JavaScript 选择自定义下载位置可能会很痛苦,因为出于安全原因,浏览器实现会严格限制它们提供给您的有关用户文件系统的信息(和访问权限)。在网络上搜索类似“HTML 设置自定义下载位置”的内容将显示相关结果。

这里的 好消息 是您可以委派这项工作 Python,这将使您更容易 select 下载位置(因为 Python 是 运行ning 在浏览器上下文之外)。由于您已经需要公开一个 Python 函数才能将 Python 代码转换为 运行,只需将对话框置于该上下文中...类似于:

import tkinter
import eel

from pytube import YouTube
from tkinter import filedialog

root = tkinter.Tk()
root.withdraw() # hide this root window

eel.init("web")

@eel.expose
def download(link):
    download_location = filedialog.asksaveasfile() # this will open the Save As dialog
    video = YouTube(link)
    stream = video.streams.get_highest_resolution()
    stream.download(download_location.name)

eel.start("index5.html")

您的目标浏览器 可能 支持一些 non-standard/trick 替代选项,因此如果您需要,请查看 webkitdirectory, File_and_Directory_Entries_API, FileSaver.js, and Using HTML5/JavaScript to generate and save a file 了解更多信息坚持 JavaScript.