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发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
python使用opencv读取图片的实例
Aug 17 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
django静态文件加载的方法
May 20 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
python实现海螺图片的方法示例
May 12 Python
python三大神器之fabric使用教程
Jun 10 Python
django 邮件发送模块smtp使用详解
Jul 22 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
python和php学习哪个更有发展
Jun 17 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
?繁体转换的class
2006/10/09 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
VUE 全局变量的几种实现方式
2018/08/22 Javascript
python开发中range()函数用法实例分析
2015/11/12 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Django接收自定义http header过程详解
2019/08/23 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
酒店应聘自荐信
2013/11/09 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
运动会拉拉队口号
2014/06/09 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
会议新闻稿
2015/07/17 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
详解Redis复制原理
2021/06/04 Redis