Python 如何将http附件转换为文件?

Python 如何将http附件转换为文件?,python,amazon-web-services,aws-lambda,Python,Amazon Web Services,Aws Lambda,我试图构建一个AWS lambda函数,它接受文件上传,然后在内存中解析它。该文件是一个xlsx文件,内容进入lambda函数,在事件的主体键中如下所示: 开始: ----------------------------300017151060007960655534 Content-Disposition: form-data; name="tag_list"; filename="test-list.xlsx" Content-Type: application/vnd.openxmlfor

我试图构建一个AWS lambda函数,它接受文件上传,然后在内存中解析它。该文件是一个xlsx文件,内容进入lambda函数,在
事件的
主体
键中如下所示:

开始:

----------------------------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')
然后我尝试将
文件
字符串传递到
字节
假脱机临时文件
,但它们都会给我错误。。。
注意,我不想使用S3。

如何将请求发送到lambda?看起来正文包含二进制(xlsx文件)和文本数据(页眉/页脚)的混合体,是否有办法在发送之前对文件进行base64编码,以便您可以将整个正文视为文本?@JDD谢谢,这是从浏览器发送的,所以我想这是可能的,但前端人员说这将是大量工作。我看看我们能不能做到,though@JDD再次感谢。将文件编码为b64字符串对于浏览器来说非常简单,这就是我们现在要走的路线