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中的闭包实例详解
Aug 29 Python
构建Python包的五个简单准则简介
Jun 15 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
django中模板的html自动转意方法
May 27 Python
python pandas修改列属性的方法详解
Jun 09 Python
python列表,字典,元组简单用法示例
Jul 11 Python
手把手教你Python yLab的绘制折线图的画法
Oct 23 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
Django ModelForm操作及验证方式
Mar 30 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
PHP 动态随机生成验证码类代码
2010/04/09 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
vue2.0之多页面的开发的示例
2018/01/30 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
Python中的引用和拷贝浅析
2014/11/22 Python
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
Django 连接sql server数据库的方法
2018/06/30 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
如何理解transaction事务的概念
2015/05/27 面试题
户外婚礼策划方案
2014/02/08 职场文书
2014年母亲节寄语
2014/05/07 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
授权委托书协议书
2014/10/16 职场文书
2014年会计工作总结
2014/11/27 职场文书
拾金不昧感谢信
2015/01/21 职场文书
公司开业主持词
2015/07/02 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python