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获取本机外网ip的方法
Apr 15 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
python读取文件名并改名字的实例
Jan 07 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
python 日期排序的实例代码
Jul 11 Python
python输出pdf文档的实例
Feb 13 Python
python支持多继承吗
Jun 19 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
Python jieba库分词模式实例用法
Jan 13 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
javascript实现商品图片放大镜
2019/11/28 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
Python lambda函数基本用法实例分析
2018/03/16 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
python进度条显示之tqmd模块
2020/08/22 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
MySQL面试题目集锦
2016/04/14 面试题
汽车驾驶求职信
2013/10/25 职场文书
生态学毕业生自荐信
2013/10/27 职场文书
高三历史教学反思
2014/01/09 职场文书
问卷调查计划书
2014/01/10 职场文书
优秀学生事迹材料
2014/02/08 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
法院授权委托书格式
2014/09/28 职场文书
关于迟到的检讨书
2015/05/06 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA
vue实现列表垂直无缝滚动
2022/04/08 Vue.js