将文件流式传输到 Pylons 中的 HTTP 响应

2023-11-23

我有一个 Pylons 控制器操作,需要将文件返回给客户端。 (该文件位于网络根目录之外,因此我不能直接链接到它。)当然,最简单的方法是:

    with open(filepath, 'rb') as f:
        response.write(f.read())

这可行,但对于大文件来说显然效率低下。最好的方法是什么?我在 Pylons 中找不到任何方便的方法来流式传输文件的内容。我真的需要自己从头开始编写代码来一次读取一个块吗?


正确使用的工具是shutil.copyfileobj,它一次将一个块从一个块复制到另一个块。

用法示例:

import shutil
with open(filepath, 'r') as f:
    shutil.copyfileobj(f, response)

这不会导致非常大的内存使用,并且不需要自己实现代码。

应注意异常情况 - 如果您处理信号(例如 SIGCHLD),则必须处理 EINTR,因为对响应的写入可能会被中断,并且在执行 I/O 时可能会因各种原因发生 IOError/OSError。

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

将文件流式传输到 Pylons 中的 HTTP 响应 的相关文章

随机推荐

  • LZ4库解压数据上限大小估计

    我在用着LZ4库以及解压缩数据时 int LZ4 decompress safe const char source char dest int compressedSize int maxDecompressedSize 我想估计最大解压
  • 混杂模式下的数据包套接字仅接收本地流量

    我有一个创建的套接字socket PF PACKET SOCK RAW htons ETH P ALL 我使用以下方法将其设置为混杂模式 struct ifreq ifr strncpy char ifr ifr name interfac
  • 获取 will_paginate 在第一页上定义自定义偏移量

    我正在我的网站上建立一个新闻版块铁路网站它使用将分页用于分页 现在我想知道如何指定自定义偏移量对于带有 will paginate 的第一页 像这样的东西 featured news Post first news Post offset
  • 如何计算矩阵中给定值的元素数量?

    有谁知道如何计算一个值在矩阵中出现的次数 例如 如果我有一个 1500 x 1 矩阵M 向量 存储工作日 1 7 的值 我如何计算存储了多少个星期日 1 星期一 2 星期六 7 M 看一下确定并计算数组的唯一值 或者 计算出现的次数5 简单
  • HttpContext.Current.Response 和 Page.Response 有什么区别?

    我正在解决一组安全页面上的缓存问题 并意识到需要修改所有响应的标头 当我整理解决方案时 我想知道 HttpContext Current Response 和 Page Response 之间的区别以及何时应在应用程序中使用每个对象 Tha
  • 如何防止在sqlite数据库中插入重复值(如果重复则覆盖)

    我在数据库中创建了两个表 在两个表中我同时插入值 现在我想做的是 我想在第二个表中插入记录 但条件是 如果有两个相同的记录记录然后我只想插入一条记录而不是重复值 在第二个表中有两个字段 一个是id第二个是category 当用户插入两个相同
  • 如何在Windows命令脚本中使用sql*plus来控制流程?

    我正在尝试使用 sql plus 来控制一个小的 Windows 命令脚本 基本上 我想执行一些 PL SQL 可能从视图或表中选择或执行函数 它显示数据库中某些行的状态 然后根据行的状态执行一些 Windows 命令 我的问题是如何将结果
  • 使用“class”关键字声明变量与在函数签名中声明不使用“class”关键字的变量

    这两种方法有什么区别 有时 当我遇到编译时错误时 抱怨编译器无法识别 函数签名中存在一些类类型 那么如果我在各个变量前面添加关键字 class 总是可以解决此类编译时错误 例如 如果编译器无法识别类型Client in void recv
  • 如何从突变中获取新对象的ID?

    我有一个createObject突变返回新对象的 ID 返回后 我想重定向到有关新对象的详细信息页面 如何使用反应 中继从包含组件中的突变获取响应字段 E g my createObject页面包含如下代码的突变 var onFailure
  • Fortran 派生类型实例的用户定义构造函数

    这是我与Fortran相关的第二个问题 我使用C 所以请原谅我的思维方式 我想在适当的时候使用 OOP 也就是说 在 Fortran 中使用派生类型 在 C 中 您可以使用用户定义的构造函数 例如https msdn microsoft c
  • 使用内置函数名称作为属性或方法标识符是不好的做法吗?

    我知道永远不要使用内置函数名称作为变量标识符 但是有什么理由不使用它们作为属性或方法标识符呢 例如 这样写是否安全my object id 5 或者定义一个实例方法dict在我自己的班级 它不会让解释器感到困惑 但可能会让阅读代码的人感到困
  • SIM工具包应用-Javacard开发套件

    我正在尝试开发 STK 应用程序 但我不知道在哪里可以获得开发套件 现在对于 Javacard 我从 Oracle 网站获得了一个 但它没有 sim toolkit 包 我不想从金雅拓等公司购买它 是否有任何 免费 实施 我已经找到了欧洲电
  • Ruby 单元测试:这是有效的(格式良好的)XML 文档吗?

    我正在创建一个 XML 文档 我想进行单元测试 至少确保其格式良好 到目前为止 我只能通过使用 REXML 库中的 hasElements 来近似这一点 有没有更好的办法 最好使用内置库 我的意思是标准 Ruby 1 8 x 发行版附带的库
  • eax 在 pt_regs 结构中的哪里?仅存在斧头

    我正在尝试使用pt regs用于获取和设置寄存器的结构 例如eax 但是编译错误告诉我pt regs没有该成员eax 但是 我能够得到ax登记 谁能告诉我发生了什么事吗 我正在使用 32 位 Ubuntu linux3 0 0核心 再次感谢
  • 检查数组中是否存在对象

    我有一个包含多个人物对象的数组 该对象如下所示 id 1 name Max Muster email email protected language German 现在 我在另一个数组中找到了对象 它们看起来并不完全相同 id 1 nam
  • 如果 Alamofire 图像中存在磁盘缓存图像,则使用磁盘缓存图像

    我正在使用阿拉莫火图像库来缓存下载的图像 Code import UIKit import AlamofireImage class ViewController UIViewController IBOutlet weak var fir
  • 如何让 Spoon 为 Espresso 测试截图?

    我一直在努力追随有关让 Spoon 1 1 14 为失败的 Espresso 测试截取屏幕截图的说明 配置此功能的最佳方法是什么自定义 Espresso FailureHandler 这是我目前正在做的事情 public class Mai
  • 阅读 WP8 上的 SSL 证书详细信息

    出于安全原因 我想阅读证书详细信息 例如到期日期或 CN 通常网络类中有一些可用的属性 允许检查证书 WP8 实现中缺少此功能 我还尝试创建一个 SslStream 但也无法获取任何证书详细信息 例如远程证书在 net 4 5 上 var
  • jQuery Mobile 更改下拉所选选项并刷新它

    我正在编写 jQuery 移动应用程序 我正在通过以下语句更改下拉选择的选项 DataBaseNames val db 我确信传递了正确的数据库值 因为我通过警报检查了它 当我深入下拉菜单时 它还显示所选的正确文本 但下拉菜单本身未显示所选
  • 将文件流式传输到 Pylons 中的 HTTP 响应

    我有一个 Pylons 控制器操作 需要将文件返回给客户端 该文件位于网络根目录之外 因此我不能直接链接到它 当然 最简单的方法是 with open filepath rb as f response write f read 这可行 但