uWSGI 专注住讬驻旨注住: 拽讗址谞讜讜注专讟讬谞讙 讚讗指拽讜诪注谞讟谉 诪讬讟 LibreOffice

袛谢褟 锌褉懈谐芯褌芯胁谢械薪懈褟 锌褉械芯斜褉邪蟹芯胁邪薪懈褟 写芯泻褍屑械薪褌芯胁 薪邪屑 锌芯薪邪写芯斜懈褌褋褟 诇讬讘专注讗指驻驻讬住注, uwsgi-python, pylokitwebob. 袦芯卸薪芯 褌邪泻卸械 胁芯褋锌芯谢褜蟹芯胁邪褌褜褋褟 驻讗址专讟讬拽. 袧芯 褝褌芯 褌芯谢褜泻芯 写谢褟 蟹邪锌褍褋泻邪 uWSGI-褋械褉胁械褉邪, 邪 写谢褟 锌芯写泻谢褞褔械薪懈褟 泻 uWSGI-褋械褉胁械褉褍 斜褍写械屑 懈褋锌芯谢褜蟹芯胁邪褌褜 谞讙讬谞拽住.

小邪屑芯械 锌褉芯褋褌芯械 uWSGI-锌褉懈谢芯卸械薪懈械 薪邪 python 褋芯褋褌芯懈褌 懈蟹 褎褍薪泻褑懈懈 application 褋 写胁褍屑褟 邪褉谐褍屑械薪褌邪屑懈 environ 懈 start_response

import os       # 懈屑锌芯褉褌懈褉褍械屑
import pylokit  # 薪械芯斜褏芯写懈屑褘械
import tempfile # 薪邪屑
import webob    # 屑芯写褍谢懈

office = pylokit.Office('/usr/lib/libreoffice/program') # 蟹邪谐褉褍卸邪械屑 斜懈斜谢懈芯褌械泻褍 LibreOffice 锌芯 褍泻邪蟹邪薪薪芯屑褍 锌褍褌懈

def application(environ, start_response): # 褎褍薪泻褑懈褟 写谢褟 uWSGI
    request = webob.Request(environ) # 锌芯谢褍褔邪械屑 蟹邪锌褉芯褋 懈蟹 芯泻褉褍卸械薪懈褟
    file = request.POST['file'] # 褎邪泄谢 写谢褟 锌褉械芯斜褉邪蟹芯胁邪薪懈褟 锌械褉械写邪褢褌褋褟 褔械褉械蟹 multipart/form-data 褋 懈屑械薪械屑 file
    filename, extension = os.path.splitext(file.filename) # 锌芯谢褍褔邪械屑 懈屑褟 懈 褉邪褋褕懈褉械薪懈械
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('/')[-1]) as out: # 褋芯蟹写邪褢屑 芯写懈薪 胁褉械屑械薪薪褘泄 褎邪泄谢 褋 褉邪褋褕懈褉械薪懈械屑 锌械褉械写邪薪薪芯谐芯 褎邪泄谢邪 懈 写褉褍谐芯泄 胁褉械屑械薪薪褘泄 褎邪泄谢 褋 褉邪褋褕懈褉械薪懈械屑 懈蟹 芯泻芯薪褔邪薪懈褟 蟹邪锌褉芯褋邪 (写谢褟 褋芯胁屑械褋褌懈屑芯褋褌懈 褋 unoconv-api)
        inp.write(file.file.read()) # 蟹邪锌懈褋褘胁邪械屑 褋芯写械褉卸懈屑芯械 锌械褉械写邪薪薪芯谐芯 褎邪泄谢邪 胁 锌械褉胁褘泄 胁褉械屑械薪薪褘泄 褎邪泄谢
        inp.flush() # (褌.泻. LibreOfficeKit 锌芯褔械屑褍-褌芯 褉邪斜芯褌邪械褌 褌芯谢褜泻芯 褋 褎邪泄谢邪屑懈)
        with office.documentLoad(inp.name) as doc: # 蟹邪谐褉褍卸邪械屑 锌械褉械写邪薪薪褘泄 褎邪泄谢 
            doc.saveAs(out.name) # 褝泻褋锌芯褉褌懈褉褍械屑 蟹邪谐褉褍卸械薪薪褘泄 褎邪泄谢 胁 写褉褍谐芯泄 胁褉械屑械薪薪褘泄 褎邪泄谢 (褎芯褉屑邪褌 斜械褉褢褌褋褟 懈蟹 褉邪褋褕懈褉械薪懈褟)
            with open(out.name, 'rb') as out2: # 芯褌泻褉褘胁邪械屑 写褉褍谐芯泄 胁褉械屑械薪薪褘泄 褎邪泄谢
                response = webob.Response(body=out2.read()) # 褋芯蟹写邪褢屑 褉械蟹褍谢褜褌邪褌 懈蟹 褔褌械薪懈褟 写褉褍谐芯谐芯 胁褉械屑械薪薪芯谐芯 褎邪泄谢邪
                return response(environ, start_response) # 懈 胁芯蟹胁褉邪褖邪械屑 械谐芯

袦芯卸薪芯, 泻芯薪械褔薪芯, 械褖褢 写芯斜邪胁懈褌褜 芯斜褉邪斜芯褌泻褍 胁褋褟泻懈褏 芯褕懈斜芯泻.

袩褉械芯斜褉邪蟹芯胁邪薪懈械 褌械褋褌芯胁芯谐芯 芯写薪芯褋褌褉邪薪懈褔薪芯谐芯 odt-褎邪泄谢邪 胁 pdf 写械谢邪械褌褋褟 锌褉懈屑械褉薪芯 胁 1,5 褉邪蟹邪 斜褘褋褌褉械械 锌芯 褋褉邪胁薪械薪懈褞 褋 unoconv-api.

诪拽讜专: www.habr.com

诇讬讬讙谉 讗址 讘讗址诪注专拽讜谞讙