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引用类型和值类型的区别与使用解析
Oct 17 Python
Python编程中NotImplementedError的使用方法
Apr 21 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
python看某个模块的版本方法
Oct 16 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
python程序控制NAO机器人行走
Apr 29 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
python 日志 logging模块详细解析
Mar 31 Python
python上selenium的弹框操作实现
Jul 13 Python
Python 可视化神器Plotly详解
Dec 26 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
php中的时间显示
2007/01/18 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
php 生成短网址原理及代码
2014/01/23 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
Python 元类使用说明
2009/12/18 Python
详谈python read readline readlines的区别
2017/09/22 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
上班上网检讨书
2014/01/29 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
助学感谢信范文
2015/01/21 职场文书
教师培训简讯
2015/07/20 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
vue项目支付功能代码详解
2022/02/18 Vue.js