跳到主要内容

Downloader

源码

downloader = Downloader(
id: str
to_addr: Callable[[str], str] | None
)

纯 Python-Dash 实现的下载组件。

该组件纯粹由 Python 代码实现。

别名

该类可以通过以下方法取得。

import dash_file_cache as dfc


dfc.Downloader
dfc.components.Downloader
dfc.components.downloader.Downloader

参数

参数类型必选
说明
idstr该组件的基本 ID。
to_addrCallable[[str], str] | None

可选预处理函数。用来将 callback 触发的输入值转换成可以用来下载的地址。

若该值留空,则会直接使用触发输入值(等价于使用lambda x: x)。

若返回空字符串,下载事件则不会触发。

方法

layout

layout: html.Div = downloader.layout()

获取该组件的布局。

输出

参数类型
说明
layouthtml.Div该下载器的布局。

use_callbacks

downloader.use_callbacks(app: dash.Dash)

使用callback。

将本组件自动生成的callback绑定到指定的app上。

输入

参数类型必选
说明
appDashDash应用。

属性

as_input

cbk_input: dash.Input = downloader.as_input

将“本组件被触发”提供为callback的输入。该输入会在可下载文件的地址就绪时被触发。


as_output

cbk_output: dash.Output = downloader.as_output

将“触发本组件”提供为callback的输出。


as_state

cbk_state: dash.State = downloader.as_state

将“本组件被触发”提供为callback的状态量。该状态量对应的输入会在可下载文件的地址就绪时被触发。

范例

最小范例

minimal_example_downloader.py
from typing import Optional
import dash
import flask
from dash import html, Input
from dash_file_cache.services.utilities import get_server
from dash_file_cache.components.downloader import Downloader


app = dash.Dash("demo")
server = get_server(app)

downloader = Downloader(id="downloader", to_addr=None)

app.layout = html.Div((html.Button(id="btn", children="Download"), downloader.layout()))

downloader.use_callbacks(app)


@server.route("/file")
def file():
resp = flask.Response("test file content", status=200, mimetype="text/plain")
resp.headers["Content-Disposition"] = "attachment; filename=test.txt"
return resp


@app.callback(downloader.as_output, Input("btn", "n_clicks"))
def trigger_get_file(n_clicks: Optional[int]):
if not n_clicks:
return dash.no_update
return "/file"


if __name__ == "__main__":
app.run()

使用背景callback下载文件

参见

下载文件