使用CURL向FastAPI服务器上传单个文件时遭遇307临时重定向的问题求助
解决FastAPI文件上传的307重定向问题
你的问题主要有两个关键点:路由路径的斜杠匹配规则和curl请求的表单字段名不匹配,我们一步步来解决:
问题原因分析
- 路由斜杠重定向:你的FastAPI路由定义是
@app.post("/uploadfiles/")(末尾带斜杠),而你curl请求的路径是/uploadfiles(不带斜杠)。FastAPI基于Starlette框架,默认会对这种情况触发307临时重定向,引导请求到带斜杠的正确路径,但curl默认不会自动跟随重定向,所以你看到了这个返回。 - 表单字段名不匹配:你的
/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
相关产品推荐
相关产品推荐

