Python接口自动化之文件上传/下载接口详解


Posted in Python onApril 05, 2022

〇、前言

文件上传/下载接口与普通接口类似,但是有细微的区别。

如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: multipart/form-data 数据类型,可以发送文件,也可以发送相关的消息体数据。

反之,文件下载就是将二进制格式的响应内容存储到本地,并根据需要下载的文件的格式来写文件名,例如:F:/合同文件.pdf。

一、文件上传接口

1. 接口文档

Request URL: /createbyfile

Request Method: POST

Content-Type: multipart/form-data

名称 类型 是否必须 描述
file File 文档文件
title String 文档名称
fileType String 文件类型:doc, docx, txt, pdf, png, gif, jpg, jpeg, tiff, html, rtf, xls, txt

2. 代码实现

(1)实现步骤:

构造文件数据,通过open函数以二进制方式打开文件

文件上传接口参数与普通post请求一样,需要写成Key和Value模式,Key为参数名称file(也是组件的name属性),Value为一个元组(与普通接口不同的地方)

Python接口自动化之文件上传/下载接口详解

"file": (
    "", # 元组第一个值为文件名称,没有则取None
    open(r"F:\pdf_file.pdf", "rb"), # 若第一个值非None,则取文件open打开的二进制流,否则直接写文件路径,如"F:\pdf_file.pdf"
    "pdf" # 文件类型
)
"file": (
    None,
    "F:\pdf_file.pdf"
)

构造其他数据

{
    "title": "接口发起的文档",
    "fileType": "pdf"
}

发送请求,将文件数据以 files 参数传入,其他消息体数据通过 data 、json 、 headers 、 cookies 等传入

req = {
            "url": "127.0.0.1/v2/document/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口发起的文档",
                "fileType": "pdf"
            }
        }

(2)完整代码

base_api.py

import requests
class BaseApi:
    @staticmethod
    def requests_http(req):
        # ** 解包
        result = requests.request(**req)
        return result

api/createbyfile.py

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2022/3/12 21:04
# 功能:根据文件类型创建合同文档
from base_api import BaseApi
class Createbyfile:
    def createbyfile(self):
        req = {
            "url": "127.0.0.1/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口发起的文档",
                "fileType": "pdf"
            }
        }
        res = BaseApi().requests_http(req)
        assert res.status_code == 200
        res_json = res.json()
        return res_json["result"]["documentId"]
if __name__ == '__main__':
    Createbyfile().createbyfile()

二、文件下载接口

1. 接口文档

Request URL:/download

Request Method:GET

名称 类型 是否必须 描述
contractId Long ID ID
downloadItems String[] 下载可选项,NORMAL(正文),ATTACHMENT(附件)
needCompressForOneFile Boolean 是,默认单文件也压缩 当下载的文件仅一份时,是否压缩

2. 代码实现

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2022/4/5 2:56
# 功能:下载合同
from base_api import BaseApi
class Download:
    def download(self):
        req = {
            "url": "127.0.0.1/download",
            "method": "GET",
            "headers": {},
            "params": {
                "contractId": 2947403075747869536,
                "downloadItems": ["NORMAL"],
                "needCompressForOneFile": False
            },
        }
        res = BaseApi().requests_http(req).content # 注意“.content"获取返回内容
        # with open("F:/response.zip", "wb") as f:
        with open("F:/response.pdf", "wb") as f:
            f.write(res)
        return res
if __name__ == '__main__':
    Download().download()

总结

到此这篇关于Python接口自动化之文件上传/下载接口的文章就介绍到这了,更多相关Python文件上传/下载接口内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python tempfile模块学习笔记(临时文件)
May 25 Python
跟老齐学Python之从格式化表达式到方法
Sep 28 Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
Python实现基本线性数据结构
Aug 22 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python探索之Metaclass初步了解
Oct 28 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
详解Python3中的 input() 函数
Mar 18 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
php中用数组的方法设置cookies
2011/04/21 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
PHP实现事件机制的方法
2015/07/10 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
python实现员工管理系统
2018/01/11 Python
简单实现python数独游戏
2018/03/30 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
为什么要用EJB
2014/04/17 面试题
大学生求职自荐信
2013/12/12 职场文书
大学军训感言
2014/01/10 职场文书
《风筝》教学反思
2014/04/10 职场文书
青年志愿者活动方案
2014/08/17 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
商家认证委托书格式
2014/10/16 职场文书
教师先进事迹材料
2014/12/16 职场文书
招商银行收入证明
2015/06/17 职场文书
一起来学习Python的元组和列表
2022/03/13 Python