4.5 上传文件

提示

内部将使用二进制流方式打开本地文件并上传到接口当中 windows中路径中直接使用\, 会被转义

上传文件服务
# 本地准备一个上传文件服务
#!/usr/bin/env/ python3
# -*- coding:utf-8 -*-
"""
@Project: apiAutoTest
@File  :serve.py
@Author:zy7y
@Date  :2021/5/19
@Desc  :
"""

from typing import List

from fastapi import FastAPI, File, UploadFile, Form

app = FastAPI()


@app.post("/upload_file/", name='上传单文件接口')
async def create_upload_file(file: UploadFile = File(...)):
    # 单文件上传接口,并将文件写到服务器地址, 接收文件对象的参数 是 file
    # 读取文件
    contents = await file.read()
    # 保存本地
    with open(file.filename, "wb") as f:
        f.write(contents)
    return {'msg': '操作成功', "filename": file.filename, "meta": {"msg": "ok"}, "code": 200}


@app.post("/upload_files/", name='上传多个文件')
async def create_upload_files(files: List[UploadFile] = File(...), username: str = Form(...), password: str = Form(...)):
    # 多文件上传接口,并将文件写到服务器, 接收文件对象的参数 是 files
    for file in files:
        # 读取文件
        contents = await file.read()
        # 保存本地
        with open(file.filename, "wb") as f:
            f.write(contents)
    return {"filenames": [file.filename for file in files], "meta": {"msg": "ok"}, "code": 200,
            "username": username,
            "password": password
            }


if __name__ == '__main__':
    # 启动项目后 访问  http://127.0.0.1:8888/docs 可查看接口文档
    import uvicorn
    uvicorn.run('serve:app', reload=True, port=8888)

    # pip install fastapi uvicorn python-multipart

修改serve,core.py

...
@property
def path(self):
    return self._path

@path.setter
def path(self, value):
    self.config.get_config("$.server.test") # 这里修改了
    self._path = f"{self.config.current}{DataProcess.rep_expr(value)}"

@property
def body(self):
    return self._body
...
上传单文件

用例数据

用例标题 是否跳过 请求头 请求地址 请求方式 入参关键字 上传文件 请求数据 提取参数 后置SQL 预期结果
上传单文件 FALSE upload_file post data {"file":"D:/FastAPIProjects/apiAutoTestDocs/demo/mkdocs.yml"} {"code":"$.code"} {"$.code":200}

结果

单文件上传

上传多文件 + 表单数据

用例数据

用例标题 是否跳过 请求头 请求地址 请求方式 入参关键字 上传文件 请求数据 提取参数 后置SQL 预期结果
上传单文件 FALSE upload_files post data {"files":["D:/FastAPIProjects/apiAutoTestDocs/demo/mkdocs.yml", "D:/FastAPIProjects/apiAutoTestDocs/demo/docs/index.md"]} {"username": "admin", "password": ""} {"$.code":200}

结果

多文件上传

服务端 服务端