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网络编程学习笔记(四):域名系统
Jun 09 Python
python笔记:mysql、redis操作方法
Jun 28 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
tornado 多进程模式解析
Jan 15 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
Python如何输出百分比
Jul 31 Python
用python计算文件的MD5值
Dec 23 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
PHP动态变静态原理
2006/11/25 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
PHP 面向对象实现代码
2009/11/11 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
竞选班干部演讲稿
2014/04/24 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
上课迟到检讨书
2015/05/06 职场文书