我正在将web.py用于一个小项目,我有文件,我希望用户能够访问服务器上的/ files目录。我似乎无法找到如何在GET请求上返回文件,所以我无法工作如何做到这一点。
本质上想要做的是:
urls = ('/files/+', 'files')
class files:
def GET(self)
#RETURN SOME FILE
是否有一种从GET请求返回文件的简单方法?
答案 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( )
其他回复者在建议您仔细考虑安全隐患时是正确的。在我的情况下,我们将这样的代码包含在一个管理Web服务中,该服务将(应该!)仅在我们的内部LAN中可用。
答案 1 :(得分:0)
您可以读取文件的内容并将其流式传输给用户,但我不认为文件句柄是可序列化的。
允许用户访问和修改服务器上的文件或将文件复制到自己的计算机上似乎是一个潜在的安全漏洞。我想你应该重新评估你想要完成的事情。
答案 2 :(得分: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