Редактировать: Как вернуть/обслуживать файл с контроллера python (back end) через веб-сервер с именем файла? как предложено @JVОбратный файл из модуля python
ответ
Полностью поддерживается в CherryPy с использованием
from cherrypy.lib.static import serve_file
Как указано в CherryPy docs - 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)
Вы можете либо передать ссылку на сам файл, т. е. полный путь к файлу. Затем вы можете открыть файл или иным образом манипулировать им.
Или, что более нормальным случаем является передача дескриптора файла и использование стандартных операций чтения/записи в дескрипторе файла.
Не рекомендуется передавать фактические данные, поскольку файлы могут быть arbiterally большими, и программа может закончиться из памяти.
В вашем случае, вы, вероятно, хотите вернуть кортеж, содержащий открытый дескриптор файла, имя файла и любые другие мета-данные, которые вы заинтересованы.
Для получения информации о типах MIME (которые, как загрузка бывает) , начинаются здесь: Properly Configure Server MIME Types.
Для получения информации о CherryPy ознакомьтесь с атрибутами объекта Response. Вы можете установить content type ответа. Кроме того, вы можете использовать tools.response_headers для установки типа содержимого.
И, конечно, есть пример File Download.
вопрос является неполным, я думаю. Действительно ли u означает возврат/подачу файла с контроллера python (back end) через веб-сервер с правильным набором и именем типа mime? – 2008-12-09 10:51:03
Это не имеет ничего общего с Python. Это вопрос о типе возвращаемого HTTP. Как установить тип возврата зависит от вашего веб-сервера. Какую структуру веб-сервера вы используете? – 2008-12-09 11:03:20
@ S.lott - Я использую черри. как отправить имя файла с помощью вишневого ответа? – 2008-12-09 11:08:45