如何使用CURL将单个文件上传到FastAPI服务器

7
我正在尝试设置一个FastAPI服务器,可以使用curl从命令行接收一个单文件上传。 我正在遵循这里的FastAPI教程:

https://fastapi.tiangolo.com/tutorial/request-files/?h=upload+file

from typing import List
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse
app = FastAPI()

@app.post("/file/")
async def create_file(file: bytes = File(...)):
     return {"file_size": len(file)}

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    return {"filename": file.filename}

@app.post("/files/")
async def create_files(files: List[bytes] = File(...)):
    return {"file_sizes": [len(file) for file in files]}

@app.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile] = File(...)):
    return {"filenames": [file.filename for file in files]}

运行此代码,然后在浏览器中打开“http://127.0.0.1:5094”,将显示一个上传表单,有四种选择文件和上传的方式。
我按照以下教程进行操作: https://medium.com/@petehouston/upload-files-with-curl-93064dcccc76 我尝试像这样上传当前目录中的“1.json”文件:
curl -F "file=@1.json" http://127.0.0.1:5094/uploadfiles

在服务器端,我得到了这个结果

INFO:     127.0.0.1:58772 - "POST /uploadfiles HTTP/1.1" 307 Temporary Redirect

我不明白为什么会发生重定向。
我需要帮助,要么猜测正确的curl语法,要么在FastAPI端修复此问题。
1个回答

3
解决方法是告诉curl跟随重定向。
curl -L -F "file=@1.json" http://127.0.0.1:5094/uploadfile

然后上传文件。


2
另外,在URL末尾添加斜杠也可以使用curl -F“file = @ 1.json”http://127.0.0.1:5094/uploadfiles/ - stasiekz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接