Доступ к файлам из web.py URL

Я использую web.py для небольшого проекта, и у меня есть файлы, которые я хочу, чтобы пользователь мог получить доступ к каталогу /files на сервере. Я не могу найти, как вернуть файл по запросу GET, поэтому я не могу работать, как это сделать.

Точно хочу сделать по сути это:

urls = ('/files/+', 'files')

class files:

  def GET(self)

    #RETURN SOME FILE

Есть ли простой способ вернуть файл из запроса GET?

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.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

Вы можете прочитать содержимое файла и передать его пользователю, но я не верю, что дескриптор файла является сериализуемым.

Казалось бы, потенциальная дыра в безопасности, позволяющая пользователям получать доступ и изменять файлы на сервере или копировать файлы на свой компьютер. Я думаю, что вы должны пересмотреть то, что вы пытаетесь достичь.

Другие вопросы по тегам