uWSGI-recept: dokumentkonvertering med hjÀlp av LibreOffice

För att förbereda dokumentkonverteringen behöver vi LibreOffice, uwsgi-python, pylokit och webob. Vi kan Àven anvÀnda den fÀrdiga metoden. Men detta Àr endast för att starta uWSGI-servern, och för att ansluta till uWSGI-servern kommer vi att anvÀnda nginx.

Det enklaste uWSGI-programmet i Python bestÄr av en applikationsfunktion med tvÄ argument, environ och start_response

import os       # importera
import pylokit  # nödvÀndiga
import tempfile # vi behöver
import webob    # moduler

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # laddar LibreOffice-biblioteket frÄn angiven sökvÀg

def application(environ, start_response): # funktion för uWSGI
    request = webob.Request(environ) # fÄr begÀran frÄn omgivningen
    file = request.POST['file'] # filen för konvertering skickas via multipart\/form-data med namnet file
    filename, extension = os.path.splitext(file.filename) # fÄr namn och tillÀgg
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # skapar en temporÀr fil med tillÀgg frÄn den angivna filen och en annan temporÀr fil med tillÀgg frÄn slutet av begÀran (för kompatibilitet med unoconv-api)
        inp.write(file.file.read()) # skriver innehÄllet frÄn den angivna filen till den första temporÀra filen
        inp.flush() # (eftersom LibreOfficeKit av nÄgon anledning bara fungerar med filer)
        with office.documentLoad(inp.name) as doc: # laddar den angivna filen 
            doc.saveAs(out.name) # exporterar den laddade filen till en annan temporÀr fil (formatet tas frÄn tillÀgget)
            with open(out.name, 'rb') as out2: # öppnar den andra temporÀra filen
                response = webob.Response(body=out2.read()) # skapar resultatet frÄn lÀsningen av den andra temporÀra filen
                return response(environ, start_response) # och returnerar den

Man kan naturligtvis ocksÄ lÀgga till felhantering.

Konvertering av en test-odt-fil pÄ en sida till pdf gÄr ungefÀr 1,5 gÄnger snabbare jÀmfört med unoconv-api.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster