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下载FTP上的文件夹的实现代码
Feb 10 Python
Python实现拼接多张图片的方法
Dec 01 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
Python实现计算对象的内存大小示例
Jul 10 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
python 爬取小说并下载的示例
Dec 07 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
PHP中extract()函数的定义和用法
2012/08/17 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
Python编程之string相关操作实例详解
2017/07/22 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
外国语学院毕业生自荐信
2013/10/28 职场文书
应届大学生求职信
2013/12/01 职场文书
会计岗位职责模板
2014/03/12 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
个人委托书范文
2015/01/28 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
Redis三种集群模式详解
2021/10/05 Redis
Golang map映射的用法
2022/04/22 Golang
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL
Python sklearn分类决策树方法详解
2022/09/23 Python