uWSGI Receptek: Dokumentumok átalakítása LibreOffice használatával

Dokumentumok átalakításához szükségünk lesz LibreOffice, uwsgi-python, pylokit és webob. Ezen kívül használhatjuk kész formában. 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 nginx.

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 unoconv-api.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster