Recepty uWSGI: konverzia dokumentov pomocou LibreOffice

Na prípravu konverzie dokumentov budeme potrebovať LibreOffice, uwsgi-python, pylokit a webob. Môžeme tiež využiť hotový spôsob. Ale toto je len na spustenie uWSGI servera, a na pripojenie k uWSGI serveru použijeme nginx.

Najjednoduchšia uWSGI aplikácia na python sa skladá z funkcie application s dvoma argumentami environ a start_response

import os       # importujeme
import pylokit  # potrebné
import tempfile # potrebujeme
import webob    # moduly

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # načítame knižnicu LibreOffice podľa uvedenej cesty

def application(environ, start_response): # funkcia pre uWSGI
    request = webob.Request(environ) # získame požiadavku z prostredia
    file = request.POST['file'] # súbor na konverziu sa prenáša cez multipart\/form-data pod menom file
    filename, extension = os.path.splitext(file.filename) # získame meno a príponu
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\\')[-1]) as out: # vytvárame jeden dočasný súbor s príponou priloženého súboru a druhý dočasný súbor s príponou z konca požiadavky (pre kompatibilitu s unoconv-api)
        inp.write(file.file.read()) # zapisujeme obsah priloženého súboru do prvého dočasného súboru
        inp.flush() # (keďže LibreOfficeKit z nejakého dôvodu funguje iba s súbormi)
        with office.documentLoad(inp.name) as doc: # načítame priložený súbor 
            doc.saveAs(out.name) # exportujeme načítaný súbor do iného dočasného súboru (formát sa berie z prípony)
            with open(out.name, 'rb') as out2: # otvoríme druhý dočasný súbor
                response = webob.Response(body=out2.read()) # vytvoríme výsledok z čítania druhého dočasného súboru
                return response(environ, start_response) # a vraciame ho

Samozrejme, môžeme pridať aj spracovanie rôznych chýb.

Konverzia testovacieho jednostránkového odt súboru na pdf sa vykonáva približne 1,5-krát rýchlejšie v porovnaní s unoconv-api.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster