跳到主要内容
版本:0.2.0

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

组件属性

名称类型
说明
idstr | Mapping[str, Any]组件ID。若设置为字典,则该ID用于模式匹配 callback
urlstr | DownloaderURL

用来访问要下载数据的URL。

每当设置该值时,就会触发一次下载事件。触发事件后,该值会重置为空字符串。

headersMapping[str, str]

提交下载事件请求时,附加的额外请求头。

在需要提供验证信息时,可以配置该属性。

allow_cross_originbool

二值量,用来决定是否使用跨域下载链接的。

若要下载的数据来自跨域站点,需要将该值配置为True,且远端站点需要提供响应头Access-Control-Allow-Origin

statusDownloaderStatus

下载事件结束时设置的状态码。

若同一下载器触发了多次下载事件,后触发的事件将会覆写先触发的事件设置的状态。

mitmstr | None用来维护下载器状态的MITM-IFrame。在浏览器处于闲置状态时,它能用于阻止下载器停用。详情参见此处。若未配置,则会使用StreamSaver.js提供的默认MITM服务,且需要互联网。
loading_stateLoadingStateDash的加载状态字典。用户不应手动设置该值。

范例

最小范例

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()

使用背景callback下载文件

参见

下载文件