【FastAPI】File & UpLoadFile 上传文件的使用

File 上传小文件

from typing import List
from fastapi import FastAPI, File
import uvicorn

app = FastAPI()

@app.post('/file')
async def up_file(
        file: bytes = File(...),
        # files: List[bytes] = File(...) # 一次性上传多个小文件
):
    """
    会把整个文件加载到内存,可能会出现爆内存的情况
    只能上传小文件,能获取字节长度,文件的其他属性不能获取到
    :param file:
    :return:
    """
    return {'file_length': len(file)}

if __name__ == '__main__':
    uvicorn.run(app)

mark

UpLoadFile 上传大文件

from typing import List
from fastapi import FastAPI, File, UploadFile
import uvicorn

app = FastAPI()

@app.post('/up_file')
async def up_file(
        file: UploadFile = File(...),
        # files: List[UploadFile] = File(...) # 一次性上传多个文件
):
    """
    UploadFile 的优势:
    - 文件存储在内存,达到阈值后,将保存到磁盘中
    - 适用于 图片、视频大文件 ...
    - 可以获取上传文件的元数据,如 文件名、类型、创建时间 ...
    - 有文件对象的异步接口
    - 上传的文件是 Python文件对象,可以使用 write()、read()、seed()、close() 进行操作

    """
    file_content = await file.read()  # 读取文件
    print(file_content)
    return {
        'file_name': file.filename,
        'file_type': file.content_type,
    }

if __name__ == '__main__':
    uvicorn.run(app)

mark

发表评论 / Comment

用心评论~