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 相关文章推荐
Django与遗留的数据库整合的方法指南
Jul 24 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
Python制作exe文件简单流程
Jan 24 Python
selenium+python截图不成功的解决方法
Jan 30 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
django中的数据库迁移的实现
Mar 16 Python
python selenium操作cookie的实现
Mar 18 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
详解Python调用系统命令的六种方法
Jan 28 Python
总结Python使用过程中的bug
Jun 18 Python
Python编程编写完善的命令行工具
Sep 15 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python筛选出两个文件中重复行的方法
2018/05/31 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
致跳高运动员广播稿
2014/01/13 职场文书
珍惜水资源建议书
2014/03/12 职场文书
荆州古城导游词
2015/02/06 职场文书
民政工作个人总结
2015/02/28 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
经理岗位职责范本
2015/04/15 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
小学同学聚会感言
2015/07/30 职场文书
送给客户微信问候语!
2019/07/04 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
MySQL自定义函数及触发器
2022/08/05 MySQL