Plotly-Dash使用dcc.Graph展示上传图片时出现FileNotFoundError如何解决
报错原因
dcc.Upload组件返回的contents参数不是本地文件路径,是符合data:[<mediatype>][;base64],<data>格式的Base64编码字符串,你直接将该字符串传入Image.open()时,PIL会将其识别为本地文件路径读取,自然触发文件不存在的报错。
修复方案
需要先对contents字符串做拆分解码,转换为字节流后再交给PIL处理,修改步骤如下:
- 新增两个依赖导入:
import base64 from io import BytesIO
- 修改
parse_contents函数的图片读取逻辑:
def parse_contents(contents, filename, date): # 拆分content,提取base64编码部分 content_type, content_string = contents.split(',') # 解码为字节流 decoded = base64.b64decode(content_string) # 用BytesIO包装后传入PIL img = np.array(Image.open(BytesIO(decoded))) fig = px.imshow(img) return html.Div([ html.H5(filename), html.H6(datetime.datetime.fromtimestamp(date)), dcc.Graph(figure=fig) ])
修改完成后重新运行代码即可正常上传图片并通过dcc.Graph展示。
内容的提问来源于stack exchange,提问作者amnesic
相关产品推荐
相关产品推荐

