使用FastAPI想要获得前端上传的数据(是一个二进制文件):
from fastapi import FastAPI, Body
app = FastAPI()
@app.post('/callback')
def callback(item = Body(...)):
return item
但是我直接返回,这里是报错:
请问,FastAPI如何获取到前端上传的二进制文件并且返回(可以对其进行打印)?
使用FastAPI想要获得前端上传的数据(是一个二进制文件):
from fastapi import FastAPI, Body
app = FastAPI()
@app.post('/callback')
def callback(item = Body(...)):
return item
但是我直接返回,这里是报错:
请问,FastAPI如何获取到前端上传的二进制文件并且返回(可以对其进行打印)?
在 FastAPI 中,如果你想获取前端上传的二进制文件并返回或打印,你应该使用 File
或 UploadFile
类型来处理文件上传。你的当前代码使用了 Body
,这通常用于处理 JSON 数据体,而不是文件上传。
以下是一个修正后的示例,展示了如何接收一个二进制文件,打印其内容,并将其返回(虽然直接返回二进制文件内容给前端可能不是很有用,通常你会选择保存文件或返回一些确认信息):
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import StreamingResponse
import io
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
# 打印文件内容(注意:对于大文件,这样直接打印可能会导致性能问题)
content = await file.read()
print(content)
# 如果你想返回文件内容,可以使用 StreamingResponse
# 注意:这里将内容包装在 BytesIO 对象中以模拟文件流
file_like_object = io.BytesIO(content)
return StreamingResponse(file_like_object, media_type="application/octet-stream")
在这个示例中:
1. 我们使用 `File` 和 `UploadFile` 来处理文件上传。
2. `await file.read()` 读取文件的全部内容为一个字节串(bytes)。
3. `print(content)` 打印文件内容。
4. 使用 `StreamingResponse` 返回一个流响应,其中包含文件的二进制内容。这里为了演示,我们将内容包装在 `io.BytesIO` 对象中。
6 回答5.3k 阅读✓ 已解决
15 回答7k 阅读
4 回答7.5k 阅读
2 回答7.5k 阅读✓ 已解决
2 回答3.3k 阅读✓ 已解决
1 回答9.6k 阅读✓ 已解决
2 回答5.3k 阅读✓ 已解决