requests上传文件,又要上传data的处理

Posted zy7y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests上传文件,又要上传data的处理相关的知识,希望对你有一定的参考价值。

前话

最近在自己学着弄接口自动化框架,因为要封装一个发送请求的父类,其中有考虑到上传文件,以及同时上传文件,和传递其他字段数据,遇到点小问题 这里解决下。

实例的接口数据

参考文档
来自fastapi官方文档上传文件实例:https://fastapi.tiangolo.com/zh/tutorial/request-files/
https://www.cnblogs.com/sanduzxcvbnm/p/12781125.html

#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: Api
@author: zy7y
@file: fapi.py
@ide: PyCharm
@time: 2020/8/1
"""

from fastapi import FastAPI, File, UploadFile, Form

app = FastAPI()


@app.post("/uploadfile/")
async def create_upload_file(file_excel: UploadFile = File(...), username: str = Form(...)):
    # 读取文件
    contents = await file_excel.read()
    # 保存本地
    with open(file_excel.filename, "wb") as f:
        f.write(contents)
    return {‘msg‘: ‘操作成功‘, "filename": file_excel.filename, ‘username‘: username}


if __name__ == ‘__main__‘:
    import uvicorn
    uvicorn.run(‘fapi:app‘, reload=True)

运行这个文件:可以通过http://127.0.0.1:8000/docs查看接口文档

技术图片

  • 请求路径:/uploadfile/
  • 请求方法:post
  • 请求参数
参数名 参数说明 备注
file_excel 文件二进制对象 不能为空
username 用户名 不能为空
  • 响应参数
参数名 参数说明 备注
msg 操作结果
filename 文件名称
username 用户名
  • 响应数据
{
  "msg": "操作成功",
  "filename": "Python自动化开发实战.pdf",
  "username": "柒意"
}

使用Request请求该接口

#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: apiAutoTest
@author: zy7y
@file: request_demo.py
@ide: PyCharm
@time: 2020/8/1
"""

import requests

# 上传文件接口
url = ‘http://127.0.0.1:8000/uploadfile/‘
# 上传非文件的参数数据
data = {
    "username": "柒意",
}
# 上传文件类型的参数数据, 下面的 ‘file_excel‘ 是上面接口中对应的请求参数里的文件对象中的参数名,
file = {‘file_excel‘: open(‘../data/case_data.xlsx‘, ‘rb‘)}

res = requests.post(url, data, files=file)
print(res.json())

结果:

/Users/zy7y/PycharmProjects/apiAutoTest/venv/bin/python /Users/zy7y/PycharmProjects/apiAutoTest/tools/demo.py
{‘msg‘: ‘操作成功‘, ‘filename‘: ‘case_data.xlsx‘, ‘username‘: ‘柒意‘}

Process finished with exit code 0

??注意:file_excel是接口请求参数中,接受文件对象的参数名



以上是关于requests上传文件,又要上传data的处理的主要内容,如果未能解决你的问题,请参考以下文章

Django处理文件上传File Uploads

Python3: requests实现文件上传(对应postman form-data)

使用requests 通过接口上传form-data格式文件

pytest + yaml 框架 -17.文件上传功能

文件上传功能报错Current request is not a multipart request

python request/读写/上传文件