Как скачать PDF-файл из Dash

Я хочу, чтобы пользователь мог загрузить файл PDF. Но когда я нажимаю на ссылку, загружается пустой файл, а при открытии файла отображается сообщение об ошибке (не удалось загрузить документ).

Файл уже сохранен в папке с ресурсами.

Это часть кода, который я использую:

html.Div(html.A('Download file', download='metodologia.pdf', href='./assets/metodologia.pdf')

person Martín Cárdenas    schedule 05.01.2021    source источник
comment
Вы пробовали href=app.get_asset_url('metodologia.pdf') вместо href='./assets/metodologia.pdf'?   -  person Flavia Giammarino    schedule 05.01.2021
comment
Большое спасибо. Так и получилось.   -  person Martín Cárdenas    schedule 05.01.2021


Ответы (1)


Я бы рекомендовал использовать компонент Download из dash-extensions==0.0.41. Вот небольшой пример из документации,

import dash
import dash_html_components as html  
from dash.dependencies import Output, Input
from dash_extensions import Download
from dash_extensions.snippets import send_file

app = dash.Dash(prevent_initial_callbacks=True)
app.layout = html.Div([html.Button("Download", id="btn"), Download(id="download")])

@app.callback(Output("download", "data"), [Input("btn", "n_clicks")])
def func(n_clicks):
    return send_file("/home/emher/Documents/Untitled.png")

if __name__ == '__main__':
    app.run_server()

По сравнению с вашим текущим решением этот подход имеет несколько преимуществ. Поскольку «под капотом» используется большой двоичный объект, поддерживаются файлы большего размера. Кроме того, вы не ограничены загрузкой файлов из папки assets.

person emher    schedule 05.01.2021