Dokumentumok átalakításához szükségünk lesz , , és . Ezen kívül használhatjuk . De ez csak az uWSGI szerver indításához szükséges, az uWSGI szerverhez való kapcsolódáshoz az alábbiakat fogjuk használni .
A legegyszerűbb uWSGI-alkalmazás Pythonban egy application függvényből áll, amely két argumentumot fogad: environ és start_response.
import os # importáljuk
import pylokit # szükséges
import tempfile # számunkra
import webob # modulok
office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # betöltjük a LibreOffice könyvtárat a megadott útvonalról
def application(environ, start_response): # függvény az uWSGI-hez
request = webob.Request(environ) # kérés beszerzése a környezettől
file = request.POST['file'] # a fájl, amelyet átalakításra küldünk, multipart\/form-data néven érkezik
filename, extension = os.path.splitext(file.filename) # név és kiterjesztés beszerzése
with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # egy ideiglenes fájl létrehozása a kapott fájl kiterjesztésével és egy másik ideiglenes fájl a kérés végződésével (unoconv-api kompatibilitás)
inp.write(file.file.read()) # az átkonvertálandó fájl tartalmának írása az első ideiglenes fájlba
inp.flush() # (mivel a LibreOfficeKit valamiért csak fájlokkal működik)
with office.documentLoad(inp.name) as doc: # a megadott fájl betöltése
doc.saveAs(out.name) # a betöltött fájl exportálása egy másik ideiglenes fájlba (a kiterjesztés a fájl kiterjesztéséből származik)
with open(out.name, 'rb') as out2: # a másik ideiglenes fájl megnyitása
response = webob.Response(body=out2.read()) # eredmény létrehozása a másik ideiglenes fájl olvasásából
return response(environ, start_response) # és ennek visszaadása
Természetesen még hozzáadhatunk különböző hibakezelést is.
Egy egylevelű teszt ODT fájl PDF-re alakítása körülbelül 1,5-szor gyorsabb, mint .
Forrás: habr.com
