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的ORM框架SQLObject入门实例
Apr 28 Python
轻松实现python搭建微信公众平台
Feb 16 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
python requests模拟登陆github的实现方法
Dec 26 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
Aug 30 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
浅谈php和.net的区别
2014/09/28 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
PHP 实现重载
2021/03/09 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python读取图片任意范围区域
2019/01/23 Python
django2.0扩展用户字段示例
2019/02/13 Python
详解python的四种内置数据结构
2019/03/19 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
保卫科工作岗位职责
2014/03/01 职场文书
基层党员公开承诺书
2014/05/29 职场文书
医德医风个人总结
2015/02/28 职场文书
2015年教师节活动总结
2015/03/20 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
高中历史教学反思
2016/02/19 职场文书
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers