当前位置: 首页 > news >正文

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 Formtask_id: str = Form(None)

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

完活收工

小结

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

http://www.lryc.cn/news/248603.html

相关文章:

  • Python高级数据结构——堆(Heap)
  • linux 讨论题合集(个人复习)
  • 浅析SD-WAN技术如何加强企业网络安全
  • 测试相关-面试高频
  • 基于Java web的多功能游戏大厅系统的开发与实现
  • 【MySQL工具】my2sql-快速解析binlog
  • vueRouter常用属性
  • Qt5.15.2的镜像网址
  • Python隐藏特性:字符串驻留、常量折叠
  • 2-Python与设计模式--工厂类相关模式
  • PGP 遇上比特币
  • 项目demo —— GPT 聊天机器人
  • Airtest进阶使用篇!提高脚本稳定性 + 批量运行脚本!
  • 数据库系统概述之数据库优化
  • 【error:Custom elements in iteration require ‘v-bind:key‘ directives】元素绑定:key
  • TA-Lib学习研究笔记(二)——Overlap Studies下
  • 三.排序与分页
  • 第一个php扩展开发的demo
  • A stop job is running for Session c1 of user root (25s 1min 30s)问题
  • C语言进阶之笔试题详解(2)
  • 【开源】基于Vue和SpringBoot的独居老人物资配送系统
  • Linux常用命令----cp 命令
  • 前端:HTML鼠标样式及其对应的CSS属性值
  • Linux 命令chgrp chown chmod
  • 网络篇---第七篇
  • Webshell混淆免杀的一些思路
  • MacBook macOs安装RabbitMQ【超详细图解】
  • 基于格攻击的密钥恢复方法
  • Redis中的缓存穿透、雪崩、击穿(详细)
  • iframe