1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Python运用fastapi完成上传图片

FastAPI是什么?

FastAPI是一种现代化的、高性能的Python Web框架。它根据标准化的Python类型提示来构建API的Web架构,并支持Python 3.6及以上版本。

Python运用fastapi完成上传图片

FastAPI的主要特征如下:

  • 速度极快,与NodeJS和Go相当;
  • 开发速度大约增强200%到300%;
  • 降低大概40%的开发人为因素造成的错误;
  • 使用强大的在线编辑器进行代码可视化;
  • 易于应用和学习;
  • 代码简洁,避免编码重复;
  • 生成互动式文档。

FastAPI应用

本文将演示如何应用FastAPI完成上传图片功能。以下是实现方式:

使用File完成文件上传

我们可以使用FastAPI的File函数来获取上传的文件。例如:

from fastapi import FastAPI, File

app = FastAPI()

@app.post("/files/")
async def create_file(file: bytes = File()):
    return {"file_size": len(file)}

只需在路径操作函数中声明变量类型为bytes并使用File函数即可得到上传文件的内容。

如果要上传大量静态资源,可以特定参数类型为bytes:file: bytes=File()。这样可以将文件内容全部读入内存条中,更加适合静态资源。

使用File函数需要提前安装python-multipart。代码如下:

pip install python-multipart

使用UploadFile实现上传图片功能

对于大文件,不能将其所有内容读入到内存中。此时,我们可以使用FastAPI的UploadFile。代码如下:

from fastapi import FastAPI, UploadFile

app = FastAPI()

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
    return {"filename": file.filename}

相较于bytes,UploadFile有以下优势:

  • 不需要使用File()作为路径操作函数参数初始值;
  • 不需要将文件所有信息加载到内存中;
  • 能够获取文件的元数据信息;
  • 该类别的变量可以像文档变量一样实际操作。

UploadFile具有以下属性:

  • filename:文件名称;
  • content_type:文件类型,例如:image/png;
  • file:类文件对象,是标准化的Python文件对象。

除了这些元素属性外,UploadFile还有3个async方式:

  • write:将str或是bytes写入文件;
  • read:读取文件;
  • seek:移动光标;
  • close:关闭文件。

例如,要获取文件具体内容,可以使用以下代码:

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]}

综上所述,本文主要介绍了如何应用FastAPI完成上传图片功能,希望可以对大家有所帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5768.html