Bokeh使用FileInput组件如何获取带目录的完整文件路径?
根因说明
浏览器的安全策略禁止所有网页端脚本获取本地文件的完整绝对路径,避免用户的文件系统信息被恶意站点窃取。该限制是全平台通用的,和Bokeh框架无关,你不可能通过任何合规的前端方法拿到文件的全路径。
可行解决方案
直接使用FileInput组件内置的文件内容读取能力,不需要通过本地路径读取文件:该组件选中文件后,value属性会返回文件的Base64编码内容,你只需要解码得到二进制内容,转成类文件对象即可传给你的自定义函数使用。
代码修改示例
import base64 from io import BytesIO from bokeh.models import FileInput csvfile = FileInput() def file_upload_callback(attr, old, new): # 解码Base64得到文件二进制内容 decoded_content = base64.b64decode(new) # 转为类文件对象,可直接对接pandas读取、自定义函数逻辑 file_obj = BytesIO(decoded_content) # 直接传入你的自定义函数即可 csvopen = myfun(file_obj) # 绑定文件选择触发事件 csvfile.on_change("value", file_upload_callback)
适配说明
- 如果你的
myfun当前仅支持传入文件路径字符串,只需修改函数内部读取文件的逻辑,将从路径读文件的代码改为直接读取传入的BytesIO类文件对象即可,其余数据处理、图表生成逻辑无需改动。 - 不建议尝试修改浏览器安全配置绕过路径限制,该类方法通用性极差,且会带来用户设备的安全风险。
内容的提问来源于stack exchange,提问作者NadeY
相关产品推荐
相关产品推荐

