# Python运用fastapi完成上传图片

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-14T02:34:00.000Z
> 分类: 解决方案
> 标签: AI, 数据库, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/619

---

# Python运用fastapi完成上传图片

> 来源: https://www.ucloud.cn/yun/130280.html
> 作者: 89542767
> 发布日期: 发布于2023-01-14 10:34

FastAPI是个现代化的，迅速（性能卓越）pythonweb架构。本文运用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
　　ap=FastAPI()
　　app.post("/uploadfile/")
　　async def create_upload_file(file:UploadFile):
　　return{"filename":file.filename}
```

　　和bytes对比，应用UploadFile有以下益处：

　　不用使用File()做为途径实际操作函数中参数初始值

　　不把文件信息所有载入到运存中，反而是大批量载入一定数量的数据信息，边写边存电脑硬盘。

　　能够获取文件的数据库。

　　该类别的自变量能够像文档自变量相同实际操作。

　　UploadFile的特性

　　filename：种类是str,用于获取文件的名称，例如：myimage.png

　　content\_type:种类是str,用于获得文件的类型，例如：image/png

　　file:类文件对象，是个标准化的python文件对象

　　除开这几个元素属性外，UploadFile也有3个async方式：

　　write,将str或是bytes提到文档中

　　read:读文件

　　seek:移动光标

　　close:关闭文件

```
　　#获取文件具体内容
　　contents=awaitmyfile.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是个现代化的，迅速（性能卓越）pythonweb架构。根据标准化的python类别提醒，应用python3.6+搭建API的Web架构。

　　FastAPI的主要特征如下所示：

　　迅速：很高的特性，与NodeJS和Go相当（这一十分感谢Starlette和Pydantic），是速度最快的Python架构其一。

　　迅速编号：将开发设计速率增强约200%到300%。

　　更低的bug：降低大概40%的开发者人为因素造成错误。

　　形象化：强悍的在线编辑器适用，调节时长较短。

　　简易：便于应用与学习。降低阅读文章文本文档的时间也。

　　代码简洁：尽量避免编码反复。每一个主要参数能够申明好几个作用，降低流程的bug。

　　健硕：生产制造编码会一键生成互动式文本文档。

　　根据规范：根据并彻底适配API的开放标准：OpenAPI和JSON方式。

　　FastAPI立在巨人的肩膀：

　　Starlette用以搭建Web构件。

　　Pydantic用以数据信息一部分。

　　自然环境提前准备

　　组装fastapi

　　pipinstallfastapi

　　对工作环境，还要1个ASGI网络服务器，如Uvicorn或Hypercorn

　　pipinstall"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.
```

　　综上所述，这篇文章就给大家介绍到这里了，希望可以给大家带来帮助。