从web.py网址访问文件

2 投票
3 回答
2781 浏览
提问于 2025-04-16 11:17

我正在用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( )

其他回答者说得对,他们建议你要仔细考虑安全问题。在我的情况下,我们会把这样的代码放到一个管理用的网络服务里,这个服务应该只在我们内部的局域网中使用。

撰写回答