fastApi笔记10-请求表单和文件上传

表单

接收的不是json格式,而是表单字段,要使用Form

需要先安装python-multipart,pip install python-multipart

使用Form可以使用于Query,Path,Body等相同的验证和元数据

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

OAuth2 规范的 "密码流" 模式规定要通过表单字段发送 username 和 password。

该规范要求字段必须命名为 username 和 password,并通过表单字段发送,不能用 JSON

文件

文件上传也是需要使用表单形式发送,也需要安装python-multipart

创建文件参数File()和Query,Path,Body有相同的验证和元数据

from fastapi import FastAPI, File

app = FastAPI()


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

FastAPI 将以bytes形式读取和接收文件内容这种方式把文件的所有内容都存储在内存里,适用于小型文件

使用UploadFile参数

from fastapi import FastAPI,UploadFile

app = FastAPI()



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

 UploadFile比Bytes更有优势,更适于处理图像、视频、二进制文件等大型文件,好处是不会占用所有内存

UploadFile的属性

filename:上传文件名

content_type:内容类型(MIME 类型 / 媒体类型)。例如image/jpeg

file:SpooledTemporaryFile( file-like 对象)。其实就是 Python文件,可直接传递给其他预期 file-like 对象的函数或支持库

UploadFile 支持以下 async 方法

(使用内部 SpooledTemporaryFile)可调用相应的文件方法。

  • write(data):把 data (str 或 bytes)写入文件;
  • read(size):按指定数量的字节或字符(size (int))读取文件内容;
  • seek(offset):移动至文件 offset (int)字节处的位置;
    • 例如,await myfile.seek(0) 移动到文件开头;
    • 执行 await myfile.read() 后,需再次读取已读取内容时,这种方法特别好用;
  • close():关闭文件

 async方法需要搭配await使用

contents = await myfile.read()

在普通def路径操作函数 内,则可以直接访UploadFile.file

contents = myfile.file.read()

可选文件参数

from fastapi import FastAPI, File, UploadFile

app = FastAPI()


@app.post("/files/")
async def create_file(file: bytes | None = File(default=None)):
    if not file:
        return {"message": "No file sent"}
    else:
        return {"file_size": len(file)}


@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile | None = None):
    if not file:
        return {"message": "No upload file sent"}
    else:
        return {"filename": file.filename}

带有额外元数据的文件上传

from fastapi import FastAPI, File, UploadFile

app = FastAPI()


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


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

多文件上传

上传多个文件时,要声明含 bytes 或 UploadFile 的列表(List

from fastapi import FastAPI, File, UploadFile

app = FastAPI()


@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]):
    return {"filenames": [file.filename for file in files]}

带有额外元数据的多文件上传

from fastapi import FastAPI, File, UploadFile

app = FastAPI()


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


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

表单和文件同时使用

from fastapi import FastAPI, File, Form, UploadFile

app = FastAPI()


@app.post("/files/")
async def create_file(
    file: bytes = File(), fileb: UploadFile = File(), token: str = Form()
):
    return {
        "file_size": len(file),
        "token": token,
        "fileb_content_type": fileb.content_type,
    }

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件设计师教程笔记整理——XMind文件是一种方便而有效的方法,用于帮助软件设计师整理和管理他们的学习笔记。XMind是一个强大的思维导图工具,可以辅助软件设计师将复杂的概念和信息整理成可视化的思维导图。以下是一些关于如何使用XMind整理软件设计师教程笔记的方法。 首先,在创建XMind文件之前,确定整理笔记的主题和目标。软件设计师教程可能涉及到多个主题,如需求分析、系统设计、编码技术等。根据教程的内容,创建适当的主题和子主题,以帮助分类和组织信息。 其次,使用XMind的多样化功能来补充思维导图。通过添加文本、图片、链接和附件等元素,增强思维导图的可读性和信息密度。例如,可以在节点中添加关键概念的定义、示意图、参考链接或相关文档,以便将来复习、研究或进一步学习。 第三,合理使用颜色和样式来区分不同类型的信息。XMind提供了丰富的颜色和样式选项,可以用来标记重要的内容、不同类型的问题或者需要进一步研究的部分。使用颜色和样式可以帮助软件设计师更快地浏览和理解思维导图。 最后,定期更新和完善XMind文件。软件设计师教程是一个不断更新和发展的领域,因此笔记的更新也是非常重要的。软件设计师应该根据自己的学习进度和新增知识,及时更新XMind文件中的内容,以保持其有效性和准确性。 总的来说,软件设计师教程笔记整理-XMind文件是一个有用的工具,可以帮助软件设计师更好地组织和管理他们的学习笔记。通过合理使用XMind的功能和特点,软件设计师可以轻松地将教程中的关键信息整理成可视化的思维导图,并随时更新和完善。这将有助于软件设计师提高学习效率和工作效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值