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多线程编程(七):使用Condition实现复杂同步
Apr 05 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
实例详解Python装饰器与闭包
Jul 29 Python
python 实现return返回多个值
Nov 19 Python
python机器学习库xgboost的使用
Jan 20 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
Python count函数使用方法实例解析
Mar 23 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 18 Python
Python开发简易五子棋小游戏
May 02 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
php中目录,文件操作详谈
2007/03/19 PHP
PHP加密解密函数详解
2015/10/28 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
BootStrap 动态表单效果
2017/06/02 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
利用Python破解斗地主残局详解
2017/06/30 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
python解析多层json操作示例
2019/12/30 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
2014政务公开实施方案
2014/02/19 职场文书
会计实训报告范文
2014/11/04 职场文书
自我评价优缺点范文
2015/03/11 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
导游词之岳阳楼
2019/09/25 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android