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 命令行也可以自动补全
Nov 30 Python
简化Python的Django框架代码的一些示例
Apr 20 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
Selenium定位元素操作示例
Aug 10 Python
在python中修改.properties文件的操作
Apr 08 Python
python json.dumps() json.dump()的区别详解
Jul 14 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
利用python汇总统计多张Excel
Sep 22 Python
关于python scrapy中添加cookie踩坑记录
Nov 17 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 Python
python中mongodb包操作数据库
Apr 19 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
PHP 开发工具
2006/12/06 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python 读写中文json的实例详解
2017/10/29 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
Python如何急速下载第三方库详解
2020/11/02 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
2014年党员公开承诺践诺书
2014/03/25 职场文书
清明节演讲稿
2014/05/27 职场文书
大学生暑假实习总结
2015/07/13 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS