Я хочу свернуть POST-файл в приложении фляги с помощью:
curl -X POST http://url_of_lambda_function.com -F 'file=@/path/to/file.pdf'
В приложении фляги есть исполняемый файл pdftotext, выполняемый через подпроцесс.Обычно для этого требуется пара параметров, поэтому ...
result = subprocess.call([pdftotext, "-layout", file, "-"])
, где pdftotext - это путь к исполняемому файлу, "-layout" - это опция, файл - это путь к pdf ('/ path/to/file.pdf ') и' - '- это вывод (в этом случае сбросьте его на экран).
МОЯ ПРОБЛЕМА:
В моей колбеприложение, у меня нет пути к файлу, как указано выше.Вместо этого я обрабатываю входящий файл следующим образом:
data = request.files['file']
file = data.read()
Данные - это объект-файл werkzeug, а файл имеет класс 'bytes'.Pdftotext принимает строки, байты или объекты типа os.Path.
Подача файла вместо /path/to/file.pdf выдает ошибку:
ValueError: embedded null byte
Преобразование файла в строку иподача дает еще одну ошибку:
OSError: [Errno 7] Argument list too long: 'pdftotext'
Я пытался обернуть это как объект BytesIO, объект StringIO и IOTextWrapper, но попался с ошибкой:
TypeError: expected str, bytes or os.PathLike object
Итак, янемного застрял!В результате у меня остается только возможность указать путь к файлу, которого у меня нет при отправке файла через curl!
МЫСЛИ:
- IМожно загрузить файл во временное хранилище и передать по пути.Это работает, но замедляет работу функции, поэтому, если это возможно, лучше избегать этого!
- Есть ли какой-то другой вид оболочки, которую я использую, которая имитирует объект os.PathLike или конвертирует, генерирует временный путь ??
Любая помощь очень ценится!