python requests接收多个同name文件

本文探讨了使用Python的requests库向服务器发送多个同名文件的方法,以及服务器端如何正确接收和处理这些文件。通过实例展示了如何利用request.files.getlist()方法获取所有同名文件,避免数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

    1.需要向服务器发送多个同name的文件,如何发送请求

    2.服务器后端如何接收到这些同name文件

发送请求样例

    

requests.post(
        url="http://localhost:8080/test",
        data={'name':'xiaoming', 'age':18},
        files=[
            ('file', open("files/1.pdf", 'rb')),
            ('file', open("files/2.pdf", 'rb'))
        ]
    )

    这个发送请求效果同postman中

后端接收探索过程

起初我觉得直接这样获取,应该可以拿到一个list,再for循环输出一下其文件名应该可以正常

@app.route('/test', methods=['POST'])
def test():
    files = request.files['file']
    for each_file in files:
        print(each_file.filename)

然而实际上这里的files仅仅只是一个FileStorage文件对象

于是我尝试多探索几个值

令人惊喜的是request.files里面本身是拥有两个同name的文件的,只是之后获取的时候丢失了,而a['file']很明显是dict形式的获取方式,所以我怀疑这里是先转换成了dict之后再获取的,很明显同name的情况下装换成dict不容乐观,必然要丢失数据。

于是上网搜了相关的关键词,反正我是没搜到相关问题。

没办法,自力更生。明显request.files对象是ImmutableMultiDict类的一个示例,搜一下ImmutableMultiDict类,其来自werzeug.datastructures包中,来看一眼ImmutableMultiDict类的源码。

意料之中的什么也没有呢,那只能找其父类啦

其中ImmutableMultiDictMixin类也出乎意料的好像什么也没有呢

只剩下MultiDict类了,我只能暗暗祈祷,然后!

我没看其实现逻辑,也没看介绍!我只知道这个方法名!getlist!这个方法的参数!key!

那么假如我这样调用是不是就能得到name为file的文件列表了???!!!

request.files.getlist('file')

结果显而易见

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值