Downloader
类组件源码
comp = Downloader(
id: str | Mapping[str, Any],
url: str | DownloaderURL,
headers: Mapping[str, str],
allow_cross_origin: bool,
status: DownloaderStatus,
mitm: str | None,
loading_state: LoadingState
)
Downloader
是基于StreamSaver
的组件。
StreamSaver.js
项目提供了用来定制下载在线流过程的方法。在实际应用中,推荐使用这种下载实现。在触发多个下载事件的场景下,其亦性能亦有优化。
别名
该类可以按以下方式之一获取
import dash_file_cache as dfc
dfc.Downloader
dfc.components.Downloader
组件属性
- 描述
- 参数
名称 | 类型 | |
---|---|---|
id | str | Mapping[str, Any] | 组件ID。若设置为字典,则该ID用于模式 匹配 callback。 |
url | str | DownloaderURL | 用来访问要下载数据的URL。 每当设置该值时,就会触发一次下载事件。触发事件后,该值会重置为空字符串。 |
headers | Mapping[str, str] | 提交下载事件请求时,附加的额外请求头。 在需要提供验证信息时,可以配置该属性。 |
allow_cross_origin | bool | 二值量,用来决定是否使用跨域下载链接的。 若要下载的数据来自跨域站点,需要将该值配置为 |
status | DownloaderStatus | 下载事件结束时设置的状态码。 若同一下载器触发了多次下载事件,后触发的事件将会覆写先触发的事件设置的状态。 |
mitm | str | None | 用来维护下载器状态的MITM-IFrame。在浏览器处于闲置状态时,它能用于阻止下载器停用。详情参见此处。若未配置,则会使用StreamSaver.js 提供的默认MITM服务,且需要互联网。 |
loading_state | LoadingState | Dash的加载状态字典。用户不应手动设置该值。 |
名称 | 类型 | 可交互 | 可设置 | 必选 | 默认值 |
---|---|---|---|---|---|
id | str | Mapping[str, Any] | undefined | |||
url | str | DownloaderURL | "" | |||
headers | Mapping[str, str] | undefined | |||
allow_cross_origin | bool | False | |||
status | DownloaderStatus | undefined | |||
mitm | str | None | undefined | |||
loading_state | LoadingState | undefined |
- “可交互”指的是,用户交互可以改变该属性、并触发callback。
- “可设置”指的是,透过callback的
Output(...)
修改该值会产生实际效果。 - “必选”指的是,初始化组件时,必须向组件传递值,否则组件无法初始化。
范例
最小范例
- 代码
- 结果
minimal_example_downloader.py
from typing import Optional
import dash
import flask
from dash import html, Output, Input
from dash_file_cache.services.utilities import get_server
from dash_file_cache.components import Downloader
from dash_file_cache.services import ServiceDownloader
app = dash.Dash("demo")
ServiceDownloader("/dfc-downloader").serve(app)
server = get_server(app)
app.layout = html.Div(
(
html.Button(id="btn", children="Download"),
Downloader(id="downloader", mitm="/dfc-downloader"),
)
)
@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(Output("downloader", "url"), 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()
渲染包含一个下载按钮的应用。
按下按钮时,会下载名为text.txt
的文件。文件内容为
test file content
使用背景callback下载文件
参见