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 21 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python中static相关知识小结
Jan 02 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
python爬取代理ip的示例
Dec 18 Python
python字符串的多行输出的实例详解
Jun 08 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
javascript编程起步(第六课)
2007/01/10 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
岗位职责范本
2013/11/23 职场文书
高三历史教学反思
2014/01/09 职场文书
写给爸爸的道歉信
2014/01/15 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
初中高效课堂实施方案
2014/02/26 职场文书
承诺书的格式范文
2014/03/28 职场文书
1亿有多大教学反思
2014/05/01 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
安全生产工作汇报
2014/10/28 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
个人售房合同协议书
2016/03/21 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书