使用 curl 将文件上传到 FastAPI 端点 - 307 临时重定向
Posted
技术标签:
【中文标题】使用 curl 将文件上传到 FastAPI 端点 - 307 临时重定向【英文标题】:uploading flie to FastAPI endpoint using curl - 307 Temporary Redirect 【发布时间】:2021-11-24 13:25:40 【问题描述】:我有一个 fastAPI 端点,它接收文件并将其保存到磁盘,如下所示:
from fastapi import FastAPI, File, UploadFile
import shutil
app = FastAPI()
@app.post('/upload')
async def upload_file(file: UploadFile=File(...)):
with open(file.filename, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return
"filename": file.filename,
当我通过http://localhost:8000/docs
的文档界面上传文件时,这可以正常工作
我可以选择一个文件并成功上传。
但是,尝试使用 curl 失败:
curl -X POST localhost:8000/upload -F file=@photo.png
curl 命令不返回任何内容,并且在服务器端记录了 307 Temporary Redirect
。
我不确定我在这里缺少什么
【问题讨论】:
您是从运行http://localhost:8000/docs
的同一台本地计算机上执行 curl 吗?你卷曲看起来不错。如果你尝试使用完整的地址 `curl -X 'POST' '127.0.0.1:8000/upload' -F 'file=@photo.png',你会得到什么?如果请求重定向,也尝试将标头放在 curl 中。
是的,一切都是从我的本地机器上运行的。在 curl 命令中将 localhost 更改为 127.0.0.1 修复了它。谢谢!
@simpleApp 你可能想回答,我会接受的。
谢谢! :) 添加了答案。
【参考方案1】:
在 FastAPI
重定向请求的某些场景/设置中,使用带有完整 dns/ip 地址的 curl。
类似这样的:
curl -X 'POST' '127.0.0.1:8000/upload' -F 'file=@photo.png
或者也可以根据构建的应用程序添加标题(-H)。
curl -X 'POST' \
'http://127.0.0.1:8000/upload' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@photo.png;type=application/json'
【讨论】:
以上是关于使用 curl 将文件上传到 FastAPI 端点 - 307 临时重定向的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 curl 将 CSV 文件发布到 spring rest 端点
如何在单独的文件中使用 FastAPI Depends 的端点/路由?
使用 cURL 将 PHP 文件上传到 imageshack