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

news/2024/2/29 3:10:01

接收不到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)

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

完活收工

小结

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


https://www.xjx100.cn/news/3118871.html

相关文章

Web安全漏洞分析-XSS(中)

随着互联网的迅猛发展,Web应用的普及程度也愈发广泛。然而,随之而来的是各种安全威胁的不断涌现,其中最为常见而危险的之一就是跨站脚本攻击(Cross-Site Scripting,简称XSS)。XSS攻击一直以来都是Web安全领…

编程零基础算法 | 四、循环和选择结构——1572. 矩阵对角线元素的和

一、题目链接 1572. 矩阵对角线元素的和 二、题目简介 给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] start 2*i(下标从 0 开始)且 n nums.length 。 请返回 nums 中所有元素按位异或(XOR)后…

vueRouter常用属性

vueRouter常用属性 basemodehashhistoryhistory模式下可能会遇到的问题及解决方案 routesprops配置(最佳方案) scrollBehavior base 基本的路由请求的路径 如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 “/app/”,所有的请求都会在url之后加上/app/ new …

通过Python Flask快速构建应用程序

通过Python Flask快速构建应用程序 当你想要快速创建一个简单且轻量级的 Web 应用程序时,Python 的 Flask 框架是一个非常好的选择。Flask 提供了许多有用的功能和扩展,可以帮助你快速搭建一个可靠的 Web 应用程序。本文将向你介绍如何快速入门并开始使…

OpenCvSharpSlim画中文

github地址:https://github.com/AvenSun/OpenCvSharpSlim Slim Build of OpenCvSharp OpenCvSharpSlim This project provides the slim build of OpenCvSharp native library . Currently therere binary packages for OpenCvSharp 2.4.10, 3.4.20 ,4.8.0 and 4…

【物联网与大数据应用】Hadoop数据处理

Hadoop是目前最成熟的大数据处理技术。Hadoop利用分而治之的思想为大数据提供了一整套解决方案,如分布式文件系统HDFS、分布式计算框架MapReduce、NoSQL数据库HBase、数据仓库工具Hive等。 Hadoop的两个核心解决了数据存储问题(HDFS分布式文件系统&#…

【Pytorch】Visualization of Feature Maps(4)——Saliency Maps

学习参考来自 Saliency Maps的原理与简单实现(使用Pytorch实现)https://github.com/wmn7/ML_Practice/tree/master/2019_07_08/Saliency%20Maps Saliency Maps 原理 《Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps》&…

初识Java 18-5 泛型

目录 动态类型安全 异常 混型 C中的混型 替代方案 与接口混合 使用装饰器模式 与动态代理混合 本笔记参考自: 《On Java 中文版》 动态类型安全 在Java 5引入泛型前,老版本的Java程序中就已经存在了List等原生集合类型。这意味着,我们…