【发布时间】:2014-08-10 16:03:56
【问题描述】:
因此,我对文件 I/O 和内存限制等方面非常满意,而且我很难让我的 Web 应用程序成功地将大文件下载服务到使用 flask 的 make_response 的 Web 浏览器。以下代码适用于较小的文件(MemoryError 异常:
raw_bytes = ""
with open(file_path, 'rb') as r:
for line in r:
raw_bytes = raw_bytes + line
response = make_response(raw_bytes)
response.headers['Content-Type'] = "application/octet-stream"
response.headers['Content-Disposition'] = "inline; filename=" + file_name
return response
我假设将超过 2 GB 的二进制数据粘贴到一个字符串中可能是一个很大的禁忌,但我不知道完成这些文件下载黑魔法的替代方法。如果有人可以让我在正确的轨道上使用 chunky[?] 或缓冲文件下载方法,或者只是将我指向一些中级资源以促进对这些东西的更深入理解,我将不胜感激。谢谢!
【问题讨论】:
-
为什么要读取文件?您可以使用
send_file()函数让 Flask 为您提供文件。 -
@MartijnPieters 因为我不知道存在这样的功能:D 我只是重新设计了实现以使用它,现在我有另一个问题;它似乎记住了打开的给定类型的第一个文件,并将其用于该类型的所有后续文件。即,如果我有一堆 png 文件、一个 pdf 文件和一个 txt 文件,应用程序将成功下载第一个正确的 png,然后为每个其他 distinct png 文件提供相同的图像.在服务器端,我已经验证了 send_file 函数获得了正确的 png 路径,但它仍然行为不端。
-
那么还有什么问题;这不是
send_file()本身可以产生的行为。