Python 如何将http附件转换为文件?
我试图构建一个AWS lambda函数,它接受文件上传,然后在内存中解析它。该文件是一个xlsx文件,内容进入lambda函数,在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
事件的主体键中如下所示:
开始:
----------------------------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字符串对于浏览器来说非常简单,这就是我们现在要走的路线