Доступ к файлам из 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
Вы можете прочитать содержимое файла и передать его пользователю, но я не верю, что дескриптор файла является сериализуемым.
Казалось бы, потенциальная дыра в безопасности, позволяющая пользователям получать доступ и изменять файлы на сервере или копировать файлы на свой компьютер. Я думаю, что вы должны пересмотреть то, что вы пытаетесь достичь.