FastAPI学习笔记(一)-15.上传文件
1.小文件上传使用内存,文件以bytes的类型读入内存。
2.File是对文件进行验证
3.多个小文件使用List[bytes]
4.上传大文件使用UploadFile类,多个大文件使用List[UploadFile]
5.上传大文件需要时间等待,因此需要使用 async + await的关键字来进行异步读取文件。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 ''' 2 @author:invoker 3 @project:fastapi202108 4 @file: chapter044.py 5 @contact:invoker2021@126.com 6 @descript: 7 @Date:2021/8/6 18:17 8 @version: Python 3.7.8 9 ''' 10 11 from fastapi import APIRouter, File, UploadFile 12 from typing import List 13 14 app044 = APIRouter() 15 16 """ 17 单文件和多文件上传 18 """ 19 20 21 # 小文件上传使用内存,文件以bytes的类型读入内存。 22 # File是对文件进行验证 23 @app044.post("/file") 24 async def file_1(file: bytes = File(...)): 25 """ 26 27 :param file: 28 :return: 29 """ 30 return {"file_size": len(file)} 31 32 33 # 多个小文件上传 34 @app044.post("/file_2") 35 async def file_2(file: List[bytes] = File(...)): 36 """ 37 38 :param file: 39 :return: 40 """ 41 return {"file1_size": len(file[0]), "file2_size": len(file[1])} 42 43 44 @app044.post("/upload_files") 45 async def upload_files(files: List[UploadFile] = File(...)): 46 """ 47 使用UploadFile类的优势: 48 1.文件刚开始也是存储在内存中,当内存到达阀值后,将被保存在硬盘中,不会出现内容爆表的问题 49 2.适合上传大图片或则视频 50 3.可以读取到文件的元数据,比如文件名,创建时间等。 51 4.有文件对象异步接口,在异步的函数(async)使用异步的方式(await)去读取或则更改文件 52 5.上传文件是Python文件对象,可以使用write(),read(),seek(),close()操作 53 :param file: 54 :return: 55 """ 56 57 for file in files: 58 contents = await file.read() 59 # await等待 file.read()读完文件才会赋值给contents 60 print(contents) 61 return {"filename":files[0].filename, 62 "content_type":files[0].content_type}
本文来自博客园,作者:kaer_invoker,转载请注明原文链接:https://www.cnblogs.com/invoker2021/p/15117529.html