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的类变量和成员变量用法实例教程
Aug 25 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
解决python中 f.write写入中文出错的问题
Oct 31 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
Python3.7+tkinter实现查询界面功能
Dec 24 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
PyQt5实现画布小程序
May 30 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
Python命名空间及作用域原理实例解析
Aug 12 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
如何在Python中创建二叉树
Mar 30 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
php checkbox 取值详细说明
2010/08/19 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
简单的自定义php模板引擎
2016/08/26 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
laravel 数据验证规则详解
2019/10/23 PHP
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
装潢设计专业推荐信模板
2013/11/26 职场文书
大学军训感想
2014/02/12 职场文书
管理提升方案
2014/06/04 职场文书
入伍通知书
2015/04/23 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
mysql事务对效率的影响分析总结
2021/10/24 MySQL
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android