我正在构建一个带有cherrypy的小型网络应用程序。
在这个应用程序中,我需要以两种不同的方式提供文件:
application/octet-stream
mime类型提供,以强制下载。目前,我添加了一个公开的方法来传输文件,一个在/document/xx
,返回正确的mime类型,另一个在/download/xx
使用八位字节流mime类型。
但我想避免自己编码。它只会带来错误和安全问题。
tl;博士:如何强迫cherrypy的tools.staticdir
强行下载?
在github上查看应用程序的完整代码:https://github.com/aspyct/docrepo(请注意,它仍然使用旧的'config.ini'文件,没有配置字典。)
答案 0 :(得分:3)
您可以通过向工具提供content_types
来强制它,将文件扩展名映射到MIME类型。像这样。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import cherrypy
path = os.path.abspath(os.path.dirname(__file__))
config = {
'global' : {
'server.socket_host' : '127.0.0.1',
'server.socket_port' : 8080,
'server.thread_pool' : 8
},
'/static' : {
'tools.staticdir.on' : True,
'tools.staticdir.dir' : os.path.join(path, 'static'),
'tools.staticdir.content_types' : {'html': 'application/octet-stream'}
}
}
if __name__ == '__main__':
cherrypy.quickstart(config = config)
如果您事先不知道扩展程序,请查看该工具的source code。只有二十几条有效的代码行。只需制作自己的微调工具即可。