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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python复制目录结构脚本代码分享
Mar 06 Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 Python
简单学习Python time模块
Apr 29 Python
python中的格式化输出用法总结
Jul 28 Python
python爬取网易云音乐评论
Nov 16 Python
python Django中models进行模糊查询的示例
Jul 18 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
python实现ping命令小程序
Dec 28 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python通过解析网页实现看报程序的方法
2014/08/04 Python
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
python执行get提交的方法
2015/04/29 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
如何理解Python中的变量
2020/06/01 Python
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
静态变量和实例变量的区别
2015/07/07 面试题
计算机专业个人求职信范例
2013/09/23 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
2015大学生实训报告
2014/11/05 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
优秀班集体申报材料
2014/12/25 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python