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 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
python实现windows倒计时锁屏功能
Jul 30 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
python实现控制台输出彩色字体
Apr 05 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
详解Python描述符的工作原理
Jun 11 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
ECMAScript 创建自己的js类库
2012/11/22 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
jQuery操作css样式
2017/05/15 jQuery
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
JS回调函数深入理解
2019/10/16 Javascript
Python多线程爬虫简单示例
2016/03/04 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
Python os库常用操作代码汇总
2020/11/03 Python
selenium自动化测试入门实战
2020/12/21 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
电气自动化专业职业规划范文
2014/02/16 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
学校消防安全责任书
2014/07/23 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
摩登时代观后感
2015/06/03 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
python如何在word中存储本地图片
2021/04/07 Python
Python基础知识学习之类的继承
2021/05/31 Python