Вернуть файл из модуля Python - PullRequest
1 голос
/ 09 декабря 2008

Редактировать: Как вернуть / передать файл с контроллера Python (серверная часть) через веб-сервер с именем файла? как предложено @ JV

Ответы [ 3 ]

2 голосов
/ 09 декабря 2008

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

Или, более нормальный случай - вернуть дескриптор файла и использовать стандартные операции чтения / записи для дескриптора файла.

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

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

1 голос
/ 09 декабря 2008

Полностью поддерживается в CherryPy с использованием

from cherrypy.lib.static import serve_file

Как описано в документации CherryPy - FileDownload :

import glob
import os.path

import cherrypy
from cherrypy.lib.static import serve_file


class Root:
    def index(self, directory="."):
        html = """<html><body><h2>Here are the files in the selected directory:</h2>
        <a href="index?directory=%s">Up</a><br />
        """ % os.path.dirname(os.path.abspath(directory))

        for filename in glob.glob(directory + '/*'):
            absPath = os.path.abspath(filename)
            if os.path.isdir(absPath):
                html += '<a href="/index?directory=' + absPath + '">' + os.path.basename(filename) + "</a> <br />"
            else:
                html += '<a href="/download/?filepath=' + absPath + '">' + os.path.basename(filename) + "</a> <br />"

        html += """</body></html>"""
        return html
    index.exposed = True

class Download:
        def index(self, filepath):
        return serve_file(filepath, "application/x-download", "attachment")
        index.exposed = True

if __name__ == '__main__':
    root = Root()
    root.download = Download()
    cherrypy.quickstart(root)
0 голосов
/ 09 декабря 2008

Информацию о типах MIME (как происходит загрузка) можно найти здесь: Правильная настройка типов MIME на сервере .

Информацию о CherryPy смотрите в атрибутах объекта Response . Вы можете установить тип содержимого ответа. Также вы можете использовать tools.response_headers для установки типа контента.

И, конечно, есть пример Загрузка файла .

...