从web.py网址访问文件
我正在用web.py做一个小项目,我有一些文件想让用户可以在服务器的/files目录下访问。但是我找不到在GET请求中返回文件的方法,所以不知道该怎么做。
我想做的基本上就是:
urls = ('/files/+', 'files')
class files:
def GET(self)
#RETURN SOME FILE
有没有简单的方法可以在GET请求中返回一个文件?
3 个回答
0
这是我使用生成器的方法,不需要把整个文件都读入内存:
web.header("Content-Disposition", "attachment; filename=%s" % doc.filename)
web.header("Content-Type", doc.filetype)
web.header("Transfer-Encoding","chunked")
f = open(os.path.join(config.upload_dir, doc.path, doc.filename), "rb")
while 1:
buf = f.read(1024 * 8)
if not buf:
break
yield buf
0
你可以读取文件的内容,然后把这些内容传送给用户,但我觉得文件句柄是不能被序列化的。
让用户访问和修改服务器上的文件,或者把文件复制到他们自己的电脑上,这样可能会造成安全隐患。我觉得你应该重新考虑一下你想要实现的目标。
3
我在玩的时候想出了这个 webpy 的 GET 方法:
def GET(self):
request = web.input( path=None )
getPath = request.path
if os.path.exists( getPath ):
getFile = file( getPath, 'rb' )
web.header('Content-type','application/octet-stream')
web.header('Content-transfer-encoding','base64')
return base64.standard_b64encode( getFile.read( ) )
else:
raise web.notfound( )
其他回答者说得对,他们建议你要仔细考虑安全问题。在我的情况下,我们会把这样的代码放到一个管理用的网络服务里,这个服务应该只在我们内部的局域网中使用。