«Файл не открыт для чтения» Flask после разделения PDF - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь разделить PDF-файл, который поступает в виде почтового запроса к этому Flask API. Я использую PyPDF2 для работы с файлами PDF, и я получаю эту ошибку при попытке опубликовать недавно разделенный файл PDF: «IOError: Файл не открыт для чтения». Я попытался открыть его еще раз перед публикацией, но это вызывает другой тип ошибки.

from flask import render_template, request
from app import app
from PyPDF2 import PdfFileWriter, PdfFileReader
import requests


@app.route('/')
def start():
    return render_template('home.html')


#upload-route
@app.route('/upload', methods = ['POST'])
def upload():
    pdf_data = None 
    split_pages = []
    if 'pdf' in request.files:
        incoming_pdf = request.files['pdf']
        pdf_data = PdfFileReader(incoming_pdf, 'rb') 
        for i in range(pdf_data.numPages):
            output = PdfFileWriter()
            output.addPage(pdf_data.getPage(i))
            with open("document-page%s.pdf" % i, "wb").read() as outputStream:
            ##new_page = output.write(outputStream)
                try:
                    split_pages.append(output)
                    print('Created: {}'.format("document-page%s.pdf" % i))
                    files  = {'userfile': outputStream }
                    upload_url ='*URL IM POSTING TO*'
                    auth_upload={
                        *AUTH KEYS*
                    }
                    r=requests.post(url=upload_url, files=files,data=auth_upload)
                finally:
                    outputStream.close()

    else:
        return "please upload a file to process"

Я знаю, что это может быть вопрос super basi c, но я потратил на это огромное количество времени, и я больше не думать прямо.

1 Ответ

0 голосов
/ 13 января 2020

Я только что посмотрел на ваш код, и что с этим?

from PyPDF2 import PdfFileWriter, PdfFileReader

with open('./reklamacja.pdf', 'rb') as my_pdf:
    pdf_data = PdfFileReader(my_pdf) 
    for i in range(pdf_data.numPages):
        output = PdfFileWriter()
        # output.addPage(pdf_data.getPage(i))
        output.insertPage(pdf_data.getPage(i))
        filename = "document-page%s.pdf" % i
        with open(filename, "wb") as outputStream:
            output.write(outputStream)

        with open(filename, 'rb') as file_to_send:
            r = requests.post('http://someurl.bin', files={'myname': file_to_send})


        { Some other code...}

Встраивайте это в ваш flask код, он должен работать. Для меня вы просто немного усложнили это в блоке try :) Надеюсь, это решит вашу проблему.

...