@sandrosklyarov

Как в Python сделать скачивание генерируемого файла?

Программно формирую xml и сохраняю к себе на диск
s = etree.ElementTree(root)
s.write( "keywordgroups.xml", encoding='utf8')

Нужно сделать тоже самое, только чтобы происходила именно скачка (из браузера) того xml, который будет генерироваться.
Знаю, как скачать файл, который лежит на сервере, а как скачать генерируемый файл?
  • Вопрос задан
  • 663 просмотра
Решения вопроса 1
@sandrosklyarov Автор вопроса
s = etree.ElementTree(root)
response = HttpResponse(etree.tostring(s, encoding="utf8", method='xml'), 'application/xml; charset=UTF-8')
response['Content-Disposition'] = 'attachment; filename=keywords.xml'
return response
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Возьмите любую интерпретацию web-сервера на питоне и отдавайте формируемый файл через него.
Например через aiohttp (проверил, рабочий)
from aiohttp import web
from concurrent.futures import ThreadPoolExecutor
import xml.etree.ElementTree as ElementTree

def get_xml():
    root = ElementTree.Element('root')
    b = ElementTree.SubElement(root, 'b')
    c = ElementTree.SubElement(root, 'c')
    d = ElementTree.SubElement(root, 'd')

    xmlstr = ElementTree.tostring(root, encoding='utf8', method='xml')
    return xmlstr

async def handle(request):
    with ThreadPoolExecutor() as executor:
        xmlstr = await request.app.loop.run_in_executor(executor, get_xml)
    return web.Response(body=xmlstr, content_type="text/xml")

app = web.Application()
app.router.add_get('/', handle)

web.run_app(app, port=8080)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы