Flask:从请求中获取多个表单文件

Flask : get multiple form files from request

我在 Flask 中有一个 python 应用程序 运行,我需要从一个 post 请求中读取多个 png 图像。

首先,您可以在此处看到我尝试尝试的请求(标​​题:application/x-www-form-urlencoded 作为内容类型):

我想从我的烧瓶应用程序中获取每个 png 文件的二进制数据,将它们存档在 tar 文件中并上传到存储中。重要提示:我事先不知道我会收到多少这样的文件。

关于文档 (https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request) 我已经尝试了不同的东西,但是没有找到一个好的和简单的方法来获取这个二进制数据。例如我尝试:

dict_data = dict(request.form)
print(dict_data)

return 我是这样的:

 {'------WebKitFormBoundaryfQXWRsfmCXS0xGpU\r\nContent-Disposition: form-data; name':'"file1"; filename="1.png"\r\nContent-Type: image/png\r\n\r\n�PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00�\x00\x00\x00�\x08\x06\x00\x00\x00�>a�\x00\x00 \x00IDATx^�{~#In��� ��k�7����\x7f�m���\x7f_\x04P�EQR�4�3�v�d��DVF\x06�\x00\x128���]_��]\x7f�LJ/\x0f\x00�9\x08\x1e\x00x\x00���\x7f�\x07\x03<\x00p�W��?��\x01\x1e\x00�� p�\x1f��\x00\x0f\x00��\x15���`�\x07\x00��\n���\x7f0�\x03\x00w~\x05���?\x18�\x01�;�\x02w��\x1f\x0c�\x00��_�;��\x0f\x06x\x00���\x7f�\x07\x03<\x00p�W��?��\x01\x1e\x00�� p�\x1f��\x00\x0f\x00��\x15���`�\x07\x00��\n���\x7f0�\x03\x00w~\x05���?\x18�\x01�;�\x02w��\x1f\x0c�\x00��_�;�
...
0f<)\x04\x00�����\x7f\x06E��\x08�[�n\x00\x00\x00\x00IEND�B`�\r\n------       WebKitFormBoundaryfQXWRsfmCXS0xGpU--\r\n': ''}

那是无法解析的。 同样的结果只是 :

request.form

其中 return :

ImmutableMultiDict([('------WebKitFormBoundaryYGznFIzweAgRIB3P\r\nContent-Disposition: form-data; name', '"file1"; filename="1.png"\r\nContent-Type: image/png\r\n\r\n�PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00�\x00\x00\x00�\x08\x06\x00\x00\x00�>a�\x00\x00 \x00IDATx^�{~#In��� ��k�7����\x7f�m���\x7f_\x04P�EQR�4�3�v�d��DVF\x06�\x00\x128���]_��]\x7f�LJ/\x0f\x00�9\x08\x1e\x00x\x00���\x7f�\x07\x03<\x00p�W��?��\x01\x1e\x00�� p�\x1f��\x00\x0f\x00��\x15���`�\x07\x00��\n��
...
Q\x06�/涮��\>��c{\x05�D\x01)��r�EH��_<', ''), ('\t� ��v\x05\x00\x00���J��\x18���6\x15�a\x00�\x03�\x0f<)\x04\x00�����\x7f\x06E��\x08�[�n\x00\x00\x00\x00IEND�B`�\r\n------WebKitFormBoundaryYGznFIzweAgRIB3P--\r\n', '')])

而对于

request.files

我只有:

 ImmutableMultiDict([]) 

我只想要一个简单的方法来拥有类似的东西:

{'file1': binary_data_of_1.png, 
'file2': binary_data_of_2.png}

在 python 中有没有简单的方法?

谢谢

如果你真的想要每个文件的二进制数据:

@app.route("/upload", methods=["POST"])
def upload():
    binary_data = {}
    the_files = request.files
    for file in the_files:
        binary_data[file] = the_files[file].read()
    ...

对象 the_files[file] 的类型为 werkzeug.datastructures.FileStorage

参见 Request.Files 文档 here

参见 FileStorage 的数据结构 here