如何通过 javascript 将选定的文件路径传递给 python 脚本
How to pass selected file path to python script via javascript
我正在使用 eel 为我的项目创建一个简单但干净的 GUI。在这个项目中,我有一个自定义数据库,需要时我会 pickle/update/unpickle。从本地网络服务器,我 select 文件并单击提交按钮。然后我将文件目录传递给以后在 python 脚本中读取。我的结构如下;
HTML
我有两个简单的元素,一个按钮和一个输入
<input type="file" id="file-upload">
<input class="btn btn-success" type="submit" onClick="get_input_directory()" value="Send">
JS
function get_input_directory() {
var data = document.getElementById("file-uploader").value
eel.get_input(data)
}
Python
目前我只打印目录如果我做对了。
@eel.expose
def get_input(data):
print(data)
我打算稍后做的是使用脚本将数据库解压到我的程序中:
with open(file_dir, "rb") as f:
mdl = pickle.load(f)
return mdl
但我的数据库文件打印为:
C:/fakepath/database.file
我在网上搜索了一下,发现这是浏览器实施的一项安全措施,但我尝试了 FileReader 方法将文件直接传递给 unpickling 函数,但也没有说不存在这样的文件。
我应该用什么来解决这个问题,或者有没有办法将目录传递到 python 脚本中,这会容易得多,因为后端已经为项目完成了很多工作。任何帮助表示赞赏。提前致谢!
这与您的计算机上没有完整存在的 JS 有关。
最好的办法是在 python/eel 中添加文件处理程序。
因为 python 确实可以完全访问您计算机的路径:
@eel.expose
def btn_ResimyoluClick():
root = Tk()
root.withdraw()
root.wm_attributes('-topmost', 1)
folder = filedialog.askdirectory()
return folder
我正在使用 eel 为我的项目创建一个简单但干净的 GUI。在这个项目中,我有一个自定义数据库,需要时我会 pickle/update/unpickle。从本地网络服务器,我 select 文件并单击提交按钮。然后我将文件目录传递给以后在 python 脚本中读取。我的结构如下;
HTML
我有两个简单的元素,一个按钮和一个输入
<input type="file" id="file-upload">
<input class="btn btn-success" type="submit" onClick="get_input_directory()" value="Send">
JS
function get_input_directory() {
var data = document.getElementById("file-uploader").value
eel.get_input(data)
}
Python
目前我只打印目录如果我做对了。
@eel.expose
def get_input(data):
print(data)
我打算稍后做的是使用脚本将数据库解压到我的程序中:
with open(file_dir, "rb") as f:
mdl = pickle.load(f)
return mdl
但我的数据库文件打印为:
C:/fakepath/database.file
我在网上搜索了一下,发现这是浏览器实施的一项安全措施,但我尝试了 FileReader 方法将文件直接传递给 unpickling 函数,但也没有说不存在这样的文件。
我应该用什么来解决这个问题,或者有没有办法将目录传递到 python 脚本中,这会容易得多,因为后端已经为项目完成了很多工作。任何帮助表示赞赏。提前致谢!
这与您的计算机上没有完整存在的 JS 有关。 最好的办法是在 python/eel 中添加文件处理程序。 因为 python 确实可以完全访问您计算机的路径:
@eel.expose
def btn_ResimyoluClick():
root = Tk()
root.withdraw()
root.wm_attributes('-topmost', 1)
folder = filedialog.askdirectory()
return folder