python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python fastapi上传文件

Python利用fastapi实现上传文件

作者:小飞牛

FastAPI是一个现代的,快速(高性能)python web框架。本文将利用fastapi实现上传文件功能,文中的示例代码讲解详细,需要的可以参考一下

使用File实现文件上传

使用Form表单上传文件,fastapi使用File获取上传的文件。

指定了参数类型是bytes:file: bytes = File(),此时会将文件内容全部读取到内存,比较适合小文件。

使用File需要提前安装 python-multipart

from fastapi import FastAPI, File
 ​
app = FastAPI()
 ​
@app.post("/files/")
async def create_file(file: bytes = File()):
   return {"file_size": len(file)}

只要在路径操作函数中声明了变量的类型是bytes且使用了File,则fastapi会将上传文件的内容全部去读到参数中。

使用UploadFile实现文件上传

对于大文件,不适合将文件内容全部读取到内存中,此时使用UploadFile

from fastapi import FastAPI, UploadFile
 ​
app = FastAPI()
 ​
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
     return {"filename": file.filename}

bytes相比,使用UploadFile有如下好处:

UploadFile的属性

除了这四个基础属性外,UploadFile还有三个async方法:

 # 获取文件内容
 contents = await myfile.read()

设置上传文件是可选的

设置默认值是None即可

 from typing import Union
 ​
 from fastapi import FastAPI, File, UploadFile
 ​
 app = FastAPI()
 ​
 ​
 @app.post("/files/")
 async def create_file(file: Union[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: Union[UploadFile, None] = None):
     if not file:
         return {"message": "No upload file sent"}
     else:
         return {"filename": file.filename}

上传多个文件

参数的参数的类型是列表:列表元素是bytes或者UploadFile

 from typing import 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]}

知识点补充

1.FastAPI简介

FastAPI是什么

FastAPI是一个现代的,快速(高性能)python web框架。基于标准的python类型提示,使用python3.6+构建API的Web框架。

FastAPI的主要特点如下:

FastAPI 站在巨人的肩膀上:

环境准备

安装fastapi

pip install fastapi

对于生产环境,还需要一个ASGI服务器,如Uvicorn或Hypercorn

pip install "uvicorn[standard]"

入门示例程序

新建一个main.py,编写如下程序:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}

运行程序:

uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.

到此这篇关于Python利用fastapi实现上传文件的文章就介绍到这了,更多相关Python fastapi上传文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文