FastAPI学习笔记(一)-15.上传文件

1.小文件上传使用内存,文件以bytes的类型读入内存。
2.File是对文件进行验证
3.多个小文件使用List[bytes]
4.上传大文件使用UploadFile类,多个大文件使用List[UploadFile]
5.上传大文件需要时间等待,因此需要使用 async + await的关键字来进行异步读取文件。
 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}
View Code

 



posted @ 2021-08-09 10:34  kaer_invoker  阅读(277)  评论(0编辑  收藏  举报