Rețete uWSGI: transformarea documentelor folosind LibreOffice

Pentru a pregăti conversia documentelor, avem nevoie de LibreOffice, uwsgi-python, pylokit și webob. Putem de asemenea să folosim o formă gata. Dar acesta este doar pentru a porni serverul uWSGI, iar pentru a ne conecta la serverul uWSGI vom folosi nginx.

Cel mai simplu aplicație uWSGI în python constă din funcția application cu două argumente environ și start_response

import os       # importăm
import pylokit  # necesare
import tempfile # pentru noi
import webob    # module

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # încărcăm biblioteca LibreOffice de la calea specificată

def application(environ, start_response): # funcția pentru uWSGI
    request = webob.Request(environ) # obținem solicitarea din mediu
    file = request.POST['file'] # fișierul pentru conversie este transmis prin multipart\/form-data cu numele file
    filename, extension = os.path.splitext(file.filename) # obținem numele și extensia
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # creăm un fișier temporar cu extensia fișierului transmis și alt fișier temporar cu extensia din sfârșitul cererii (pentru compatibilitate cu unoconv-api)
        inp.write(file.file.read()) # scriem conținutul fișierului transmis în primul fișier temporar
        inp.flush() # (deoarece LibreOfficeKit din motive necunoscute funcționează doar cu fișiere)
        with office.documentLoad(inp.name) as doc: # încărcăm fișierul transmis 
            doc.saveAs(out.name) # exportăm fișierul încărcat în alt fișier temporar (formatul este preluat din extensie)
            with open(out.name, 'rb') as out2: # deschidem alt fișier temporar
                response = webob.Response(body=out2.read()) # creăm rezultatul din citirea altui fișier temporar
                return response(environ, start_response) # și îl returnăm

Desigur, putem adăuga și gestionarea diverselor erori.

Conversia unui fișier odt de test în pdf se face aproximativ de 1,5 ori mai rapid comparativ cu unoconv-api.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster