Python运用fastapi完成上传图片

AI 摘要 / TL;DR

Python运用fastapi完成上传图片 来源: https://www.ucloud.cn/yun/130280.html 作者: 89542767 发布日期: 发布于2023 01 14 10:34 FastAPI是个现代化的,迅速(性能卓越)pythonweb架构。本文运用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.

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