编辑:如何通过 web 服务器从 python 控制器(后端)返回/提供文件,使用 file_name?正如@JV 所建议的那样
Mohit Ranka
问问题
13787 次
3 回答
2
您可以传回对文件本身的引用,即文件的完整路径。然后您可以打开文件或以其他方式操作它。
或者,更正常的情况是传回文件句柄,并对文件句柄使用标准的读/写操作。
不建议传递实际数据,因为文件可以任意大并且程序可能会耗尽内存。
在您的情况下,您可能希望返回一个包含打开文件句柄、文件名和您感兴趣的任何其他元数据的元组。
于 2008-12-09T10:56:37.430 回答
1
CherryPy 完全支持使用
from cherrypy.lib.static import serve_file
如CherryPy 文档中所述 - FileDownload:
import glob
import os.path
import cherrypy
from cherrypy.lib.static import serve_file
class Root:
def index(self, directory="."):
html = """<html><body><h2>Here are the files in the selected directory:</h2>
<a href="index?directory=%s">Up</a><br />
""" % os.path.dirname(os.path.abspath(directory))
for filename in glob.glob(directory + '/*'):
absPath = os.path.abspath(filename)
if os.path.isdir(absPath):
html += '<a href="/index?directory=' + absPath + '">' + os.path.basename(filename) + "</a> <br />"
else:
html += '<a href="/download/?filepath=' + absPath + '">' + os.path.basename(filename) + "</a> <br />"
html += """</body></html>"""
return html
index.exposed = True
class Download:
def index(self, filepath):
return serve_file(filepath, "application/x-download", "attachment")
index.exposed = True
if __name__ == '__main__':
root = Root()
root.download = Download()
cherrypy.quickstart(root)
于 2008-12-09T11:48:15.047 回答
0
有关 MIME 类型(下载方式)的信息,请从此处开始:正确配置服务器 MIME 类型。
有关 CherryPy 的信息,请查看Response对象的属性。您可以设置响应的内容类型。此外,您可以使用tools.response_headers设置内容类型。
当然,还有一个File Download的例子。
于 2008-12-09T11:06:04.960 回答