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 条件判断的缩写方法
Sep 06 Python
python实现sublime3的less编译插件示例
Apr 27 Python
python中文编码问题小结
Sep 28 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
May 25 Python
python使用生成器实现可迭代对象
Mar 20 Python
Python堆排序原理与实现方法详解
May 11 Python
学习python的前途 python挣钱
Feb 27 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
python实现ping命令小程序
Dec 28 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
PHP.MVC的模板标签系统(二)
2006/09/05 PHP
一篇入门的php Class 文章
2007/04/04 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
jQuery操作cookie
2016/08/08 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
python中二维阵列的变换实例
2014/10/09 Python
如何在Python中编写并发程序
2016/02/27 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
外语专业毕业生个人的自荐信
2013/11/19 职场文书
反邪教标语
2014/06/23 职场文书
法人授权委托书
2014/09/16 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
民间借贷协议书范本
2014/10/01 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
党员年度个人总结
2015/02/14 职场文书
音乐之声观后感
2015/06/04 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
python中的getter与setter你了解吗
2022/03/24 Python