FastApi接收不到Apifox发送的from-data字符串_解决方法

接收不到Apifox发送的from-data字符串_解决方法

问题描述

这里写了一个接口,功能是上传文件,接口参数是file文件和一个id字符串

@gpt_router.post("/uploadfiles")
async def create_upload_files(files: List[UploadFile] = File(...), task_id: str = None):    
    # print('files:',files)
    print(f"Task ID: {task_id}")
    return HttpResponse.ok(message="上传成功")

Apifox请求之后,文件可以接收到,但是接收不到id
在这里插入图片描述
在这里插入图片描述

解决方法

使用 Form 类型来接收 form-data 中的字段,包括字符串。
引入一下From,更改一下参数

from fastapi import Form

@gpt_router.post("/uploadfiles")
async def create_upload_files(files: List[UploadFile] = File(...), task_id: str = Form(None)):    
    # print('files:',files)
    print(f"Task ID: {task_id}")
    return HttpResponse.ok(message="上传成功")

在这里插入图片描述

弯路总结

弯路描述

查看Apifox请求中的请求头的时候,发现content-type的值是application/json,不是传的from-data类型。

在这里插入图片描述

于是乎,在请求头中设置Content-type为multipart/form-data,请求之后依然接收不到task_id,同时请求头Header中content-type的值依然是application/json。(奇怪喔)

在这里插入图片描述
然后一顿搜索,甚至官方文档也看了,依然不行。
在这里插入图片描述

请添加图片描述

纵观全局

在查看Apifox官方文档的时候了解到,只要请求的时候点选了数据类型,请求的Content-type其实就已经更改了,至于为什么请求完的Header里content-type还是application/json就不得而知了。(知道为什么的大佬可以在评论区讲解一下,提前致谢)
在这里插入图片描述

所以到这里只要我点选的是from-data,那么content-type就已经是multipart/form-data了,所以请求没有错,那可能就是后端出现的问题,解决问题的方向错了。

再来看下问题,同样的from-data数据,文件就可以接收到,而字符串不行,那说明两者中,文件是正确的,字符串在哪里出了问题,我们对比下参数部分代码。
在这里插入图片描述
提取一下

files: List[UploadFile] = File(...)
task_id: str = None

请添加图片描述
不难看出是= File(...)= None默认值的区别,那就是字符串不是这么接收的,或者说应该和File一样的接收格式,那么具体该怎么接收from-data数据呢?

查了一下发现:

在 FastAPI 中,要使用 Form 类型来接收 form-data 中的字段,包括字符串。

请添加图片描述

心机之蛙一直摸你肚子

原来是接收方式不对,这也怪鄙人python后端不熟练的原因,闹了笑话,见笑了。

知道原因就好办了,引入一下From,更改一下参数

from fastapi import Form

task_id: str = Form(None)

测试
在这里插入图片描述
请添加图片描述

完活收工

小结

解决问题所收获的的不是解决问题本身,而是解决问题的过程以及其中的思路、以及无法用文字描述的东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿松爱睡觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值