Как преобразовать вложение http в файл? - PullRequest
2 голосов
/ 16 мая 2019

Я пытаюсь создать лямбда-функцию AWS, которая принимает загружаемый файл и затем анализирует его в памяти. Этот файл представляет собой файл xlsx, и его содержимое поступает в функцию лямбда, которая выглядит следующим образом: клавиша body в event:

Начало:

----------------------------300017151060007960655534
Content-Disposition: form-data; name="tag_list"; filename="test-list.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
PK
�y�N docProps/PK

И конец строки выглядит так:

[Content_Types].xmlPK�;
----------------------------475068475306850797919587--

Если я выполняю заголовок / фактический файл на моем компьютере, кажется, что файл начинается с PK и заканчивается на xmlPK�;. Я попытался вырезать этот раздел и создать объект BytesIO или SpooledTemporaryFile, но ни один из этих параметров не работает. Все они дают мне что-то вроде неправильной позиции поиска или ошибок в zip-файле.

Моя цель - загрузить этот файл xlsx в память и затем проанализировать его, используя openpyxl.

Моя текущая функция выглядит примерно так в настоящее время. Я продолжаю пытаться отформатировать это по-другому, иногда я декодирую это, иногда нет.

def lambda_handler(event, context):
    file_index = event['body'].index('PK')
    file_string = event['body'][file_index:]
    file_end = file_string.index(';')
    file = file_string[:file_end].encode('utf-8')

Затем я пытаюсь передать строку file в BytesIO или SpooledTemporaryFile, но все они дают мне ошибки ... Обратите внимание, я не хочу использовать S3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...