如何在 Flask send_file() 或 send_from_directory() 之后运行代码

2023-12-23

我有一个基于 Flask 的网站,用户可以在其中下载一些 PDF 文件。

使用 Flask 可以直接实现send_file() http://flask.pocoo.org/docs/0.10/api/#flask.send_file and send_from_directory() http://flask.pocoo.org/docs/0.10/api/#flask.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 http://flask.pocoo.org/docs/0.10/api/#flask.after_this_request钩。但看起来像send_file()异步运行所以@after_this_request可能会在文件下载之前触发。

  • 例如,如果文件很大,下载可能需要一段时间,因此@after_this_request似乎在下载文件时触发。
  • 它看起来来自文档 http://flask.pocoo.org/docs/0.10/api/#flask.send_file like send_file()使用 WSGI 的文件包装器来完成下载...也许这就是它异步运行的原因?

有办法打电话吗after_download()这样就可以保证在之后运行send_file() has 完全的将文件发送给用户?


你不能。尽管send_file在使用开发服务器时使用 Flask 流式传输文件,它可能(并且确实应该为了性能)使用 Web 服务器(nginx、apache 等)并且X-SendFile在生产中。由于 Web 服务器超出了应用程序的控制范围,因此您运气不好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Flask send_file() 或 send_from_directory() 之后运行代码 的相关文章

随机推荐

  • Anaconda:IPython/Jupyter Notebook 中的 Python 3 和 2

    我安装了 Anaconda 的 Python 3 并且希望能够在 python2 和 3 内核之间快速切换 这是在 OSX 上 到目前为止我的步骤包括 conda create p anaconda envs python2 python
  • Python re.sub() 行首锚定

    考虑以下多行字符串 gt gt print s shall i compare thee to a summer s day thou art more lovely and more temperate rough winds do sh
  • 我们如何检查一个数组是否包含#中另一个数组的一个或多个元素?

    我有一个字符串数组 例如 string names P A B G F K R 我有另一个数组 string subnames P G O 我们如何检查名称数组是否包含子名称数组的任何元素 在上面的示例中 名称中存在 P 和 G 这是一个
  • Bash:检查是否按下了 Enter

    How can I check in Bash if the Enter key has been pressed I m using the read command read p Please press ENTER var 首先检查退
  • 使用 argparse 解析字符串

    所以我希望argparse的输入是一个字符串而不是命令行 例如 python3 some script py arg1 arg2 arg3 我想给 argparse 字符串 arg1 arg2 arg3 import argparse co
  • 从浏览器历史记录中删除当前页面

    我正在我的网站上构建一个文本编辑器 工作流程如下 In list 用户从列表中选择他们想要编辑的条目 该列表会将他们带到 edit article id 用户完成工作 然后单击 提交 服务器处理该事物 并将它们重定向回 edit artic
  • Nuxt 为所有动态路由生成带有后备文件的静态站点

    我已经在整个互联网上搜索了我的问题的答案 到目前为止还没有运气 我想要实现的目标 我有一个在通用模式下运行的 Nuxt 应用程序 它就像一个小型社交网络 用户可以在其中创建自己的个人资料并分享他们的工作 因此 我正在使用动态路由 users
  • 我如何清理 mysql 上的临时表

    我们在程序中创建临时表 并且我们不使用 mysql 的持久连接 mysql重启后 有很多临时表慢慢增加 然后innodb buffer pool size正在整理 应用程序正在该服务器上运行 CPU E3 1245 v5 3 50GHz 8
  • 如何远程检查 RedisCloud 数据库中的数据?

    我使用 Heroku 托管一个简单的 Ruby on Rails 测试应用程序来学习如何使用 Redis 我使用 RedisCloud 作为我的 Redis 服务提供商 在本地 我可以使用 Redis CLI 检查我的 Redis 数据库
  • 如何为 Webstorm 编写自己的插件?

    我想为 WebStorm 编写一个专门的插件 可以为自定义框架提供帮助 有关于如何做到这一点的教程吗 没有可用的 WebStorm 特定指南 插件的创建方式与 IntelliJ IDEA 完全相同 http confluence jetbr
  • 使用数据绑定具有多个视图类型的 Android recyclerview 适配器

    是否可以在我的适配器中创建多个视图类型 例如为我的标题添加视图 然后标题下方是一个列表 我的适配器的代码片段 public class StoreAdapter extends RecyclerView Adapter
  • Mysql:显示另一列下方的列的值

    我真的陷入了这个困境 我通过准备一条可执行语句尝试了联合 我非常清楚 SQL 不是一种用于此类任务的语言 但到目前为止 目标是创建一个原型 实际的技术实施将在稍后发生 我会解释我的要求 有一个临时表 我在其中存储名称 项目以及与该项目相关的
  • arch linux 上的 asp.net core 2.1 无法运行

    我已经在 Arch Linux 上使用 pacman 安装了最新版本的 net core sudo pacman S dotnet sdk Running dotnet info显示正确的版本 Host useful for support
  • NSURLIsExcludedFromBackupKey 在 iOS 5.1 之前崩溃

    和许多 iOS 开发者一样 我在使用 5 1 之前的系统时也遇到过应用程序崩溃的问题NSURLIsExcludedFromBackupKey 很好地描述了如何评估该线程上该键的存在 在 iOS 5 0 上使用 NSURLIsExcluded
  • ASP.Net 复选框返回“是”或“否”值(而不是 True / False)

    我正在使用 C 和 ASP Net 3 5 并尝试从复选框获取 是 否 值 而不是 True False 有没有简单的方法或者我需要做 if 语句 一定要试试这个 string doesThisWork chkBox Checked Yes
  • 我应该把 php 文件放在哪里才能让 Xampp 解析它们?

    我完成了上网本 Ubuntu 10 和 XAMPP 的安装 XAMPP 网站教程使安装变得非常容易 但让我感到茫然无措 一切正常 但我不知道将我的手写 php 文件放在哪里 经过几个小时的谷歌搜索 并试图理解文件资源管理器 我意识到我不知道
  • Eclipse CDT 和未知标签

    目前 我们正在考虑将我们的开发环境从 CodeWright 它早已被 Borland 放弃 迁移到 Eclipse 我们使用 Eclipse 进行 Perl PHP 和一些 Windows C 开发 并取得了巨大成功 然而 问题出现在我们的
  • 如何隐藏Android软键盘? [复制]

    这个问题在这里已经有答案了 我在 Linearlayout 中有两个 EditText 视图和一个按钮 在编辑文本中写入完成后 我想隐藏Android虚拟键盘 我该怎么做 您可以像这样使用 InputMethodManager 类 Inpu
  • 如何使用 Cloudflare Worker 发出异步请求(非阻塞)

    我正在编写一个 Cloudflare Worker 需要在我的原始请求完成后 ping 分析服务 我不希望它阻止原始请求 因为我不希望分析系统的延迟或故障减慢或中断请求 如何创建在原始请求完成后开始和结束的请求 addEventListen
  • 如何在 Flask send_file() 或 send_from_directory() 之后运行代码

    我有一个基于 Flask 的网站 用户可以在其中下载一些 PDF 文件 使用 Flask 可以直接实现send file http flask pocoo org docs 0 10 api flask send file and send