Resep uWSGI: Ngarobih Dokumén Nganggo LibreOffice

Pikeun nyiapkeun konvérsi dokumen urang peryogi LibreOffice, uwsgi-python, pylokit и webob. Anjeun oge bisa make siap-dijieun. Tapi ieu ngan ukur pikeun ngaluncurkeun server uWSGI, sareng pikeun nyambung ka server uWSGI anu bakal kami anggo nginx.

Aplikasi uWSGI pangbasajanna dina python diwangun ku aplikasi fungsi sareng dua argumen environ sareng start_response

import os       # импортируем
import pylokit  # необходимые
import tempfile # нам
import webob    # модули

office = pylokit.Office('/usr/lib/libreoffice/program') # загружаем библиотеку LibreOffice по указанному пути

def application(environ, start_response): # функция для uWSGI
    request = webob.Request(environ) # получаем запрос из окружения
    file = request.POST['file'] # файл для преобразования передаётся через multipart/form-data с именем file
    filename, extension = os.path.splitext(file.filename) # получаем имя и расширение
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('/')[-1]) as out: # создаём один временный файл с расширением переданного файла и другой временный файл с расширением из окончания запроса (для совместимости с unoconv-api)
        inp.write(file.file.read()) # записываем содержимое переданного файла в первый временный файл
        inp.flush() # (т.к. LibreOfficeKit почему-то работает только с файлами)
        with office.documentLoad(inp.name) as doc: # загружаем переданный файл 
            doc.saveAs(out.name) # экспортируем загруженный файл в другой временный файл (формат берётся из расширения)
            with open(out.name, 'rb') as out2: # открываем другой временный файл
                response = webob.Response(body=out2.read()) # создаём результат из чтения другого временного файла
                return response(environ, start_response) # и возвращаем его

Anjeun tiasa, tangtosna, ogé nambahkeun penanganan kasalahan.

Ngarobih file odt halaman tunggal tés kana pdf kirang langkung 1,5 kali langkung gancang dibandingkeun unoconv-api.

sumber: www.habr.com

Tambahkeun komentar