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} |
结果
服务端