簡體   English   中英

如何在Flask send_file()或send_from_directory()之后運行代碼

[英]How to run code after Flask send_file() or send_from_directory()

我有一個基於Flask的網站,用戶可以下載一些PDF文件。

使用Flask的send_file()send_from_directory()可以直接實現。

例如:

@app.route('/downloadreport')
def download_report():
    return send_from_directory(
        '/reports', 
        'my_report.pdf', 
        as_attachment=True)

我想在下載完成后執行一些邏輯(讓我們稱之為after_download() )。

我嘗試過使用@after_this_request鈎子。 但看起來send_file()異步運行,因此@after_this_request可能會在下載文件之前觸發。

  • 例如,如果文件非常大,下載可能需要一段時間,因此@after_this_request似乎在下載文件時觸發。
  • 它看起來像send_file()這樣的文檔使用WSGI的文件包裝器來實現下載...也許這就是為什么它以異步方式運行?

有沒有辦法調用after_download()以便在send_file() 完成將文件發送給用戶后保證運行?

你不能。 雖然send_file在使用開發服務器時使用Flask流式傳輸文件,但它可能(實際上應該是性能)在生產中使用Web服務器(nginx,apache等)和X-SendFile 由於Web服務器無法控制應用程序,因此您運氣不佳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM