• FastAPI 学习之路(十七)上传文件


    我们去实现下上传,看一下文件如何上传

    1. from fastapi import FastAPI, File, UploadFile
    2. app = FastAPI()
    3. @app.post("/files")
    4. def create(file: bytes = File(...)):
    5. return {"file_size": len(file)}
    6. @app.post("/uploadfile")
    7. def upload_file(file: UploadFile = File(...)):
    8. return {"filename": file.filename}

    我们去测试下

    试一下另外一个 接口

     两个接口都是可以上传文件的。

    File 是直接继承自 Form 的类。

           注意,从 fastapi 导入的 Query、Path、File 等项,实际上是返回特定类的函数。

    UploadFile 的属性如下:

    • filename:上传文件名字符串(str),例如, myimage.jpg;
    • content_type:内容类型(MIME 类型 / 媒体类型)字符串(str),例如,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」使用。

    例如,在 async 路径操作函数 内,要用以下方式读取文件内容

    contents = await myfile.read()
    

     使用 async 方法时,FastAPI 在线程池中执行文件方法,并 awiat 操作完成。

    FastAPI 的 UploadFile 直接继承自 Starlette 的 UploadFile,但添加了一些必要功能,使之与 Pydantic 及 FastAPI 的其它部件兼容。

           我们实现下多个文件的上传

    1. from fastapi import FastAPI, File, UploadFile
    2. from typing import List
    3. app = FastAPI()
    4. @app.post("/files")
    5. async def create(files: List[bytes] = File(...)):
    6. return {"file_sizes": [len(file) for file in files]}
    7. @app.post("/uploadfile")
    8. async def upload_file(files: List[UploadFile] = File(...)):
    9. return {"filenames": [file.filename for file in files]}

    我们看上传结果

     

    我们可以针对这些文件进行处理。

  • 相关阅读:
    5-3 批处理作业调度(回溯)
    计算机毕业设计SSM电影网站系统设计【附源码数据库】
    Spring事务管理和事务相关配置以及事务传播行为
    PHP + Laravel + RabbitMQ + Redis 实现消息队列 (五) 异常处理(死信)、延时队列与优先队列
    8 ICMP与ping
    自制网页。
    记一次nginx配置不当引发的499与failover 机制失效
    GIT | git只上传文件夹目录,不监控目录里面的文件的解决方法
    使用WPF开发BLE应用
    网络运维Day04-补充
  • 原文地址:https://blog.csdn.net/myli_binbin/article/details/126544505