You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CURL向FastAPI服务器上传单个文件时遭遇307临时重定向的问题求助

解决FastAPI文件上传的307重定向问题

你的问题主要有两个关键点:路由路径的斜杠匹配规则和curl请求的表单字段名不匹配,我们一步步来解决:

问题原因分析

  1. 路由斜杠重定向:你的FastAPI路由定义是@app.post("/uploadfiles/")(末尾带斜杠),而你curl请求的路径是/uploadfiles(不带斜杠)。FastAPI基于Starlette框架,默认会对这种情况触发307临时重定向,引导请求到带斜杠的正确路径,但curl默认不会自动跟随重定向,所以你看到了这个返回。
  2. 表单字段名不匹配:你的/uploadfiles/接口接收的是名为files的多文件参数(files: List[UploadFile] = File(...)),但你curl命令里用的是file=@1.json,字段名是单数的file,即使路径正确,接口也无法识别这个参数。

修复方案

方案1:修正curl命令(推荐,无需修改代码)

调整两个地方:

  • 给请求路径加上末尾斜杠
  • 把表单字段名改成files(和接口参数名一致)

单个文件上传到多文件接口的命令:

curl -F "files=@1.json" http://127.0.0.1:5094/uploadfiles/

如果要上传多个文件,只需追加多个-F参数:

curl -F "files=@1.json" -F "files=@2.txt" http://127.0.0.1:5094/uploadfiles/

如果你只是想上传单个文件,更适合用你定义的/uploadfile/接口(单数),对应的curl命令是:

curl -F "file=@1.json" http://127.0.0.1:5094/uploadfile/

方案2:修改FastAPI配置(消除重定向)

如果你希望不管请求路径带不带斜杠都能正常访问,可以在创建FastAPI实例时关闭自动重定向:

app = FastAPI(redirect_slashes=False)

这样/uploadfiles和/uploadfiles/都会匹配到对应的路由,不会触发重定向。同时记得保持curl的表单字段名和接口参数一致。

内容的提问来源于stack exchange,提问作者576i

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:44:06