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

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

2 голосов
/ 05 февраля 2011

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

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

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

class files:

  def GET(self)

    #RETURN SOME FILE

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

Ответы [ 3 ]

3 голосов
/ 01 сентября 2011

Играя вокруг, я придумала следующий метод 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( )

Другие респонденты верны, когда советуют внимательно рассмотреть последствия для безопасности.В моем случае мы добавим подобный код в административный веб-сервис, который будет (должен быть!) Доступен только в нашей внутренней локальной сети.

0 голосов
/ 02 сентября 2011

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

    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 голосов
/ 05 февраля 2011

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

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

...