Python接口自动化之文件上传/下载接口详解

作者:IT小学生蔡坨 时间:2022-01-02 17:32:28 

〇、前言

文件上传/下载接口与普通接口类似,但是有细微的区别。

如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: multipart/form-data 数据类型,可以发送文件,也可以发送相关的消息体数据。

反之,文件下载就是将二进制格式的响应内容存储到本地,并根据需要下载的文件的格式来写文件名,例如:F:/合同文件.pdf。

一、文件上传接口

1. 接口文档

Request URL: /createbyfile

Request Method: POST

Content-Type: multipart/form-data

名称类型是否必须描述
fileFile文档文件
titleString文档名称
fileTypeString文件类型: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

名称类型是否必须描述
contractIdLongIDID
downloadItemsString[]下载可选项,NORMAL(正文),ATTACHMENT(附件)
needCompressForOneFileBoolean是,默认单文件也压缩当下载的文件仅一份时,是否压缩

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()

来源:https://www.cnblogs.com/caituotuo/p/16101337.html

标签:上传,下载,接口
0
投稿

猜你喜欢

  • Python使用asyncio异步时的常见问题总结

    2021-02-06 04:43:12
  • python网络爬虫精解之Beautiful Soup的使用说明

    2021-02-21 15:20:48
  • python3:excel操作之读取数据并返回字典 + 写入的案例

    2023-11-25 17:59:22
  • python基于pygame实现飞机大作战小游戏

    2021-04-27 07:59:17
  • 微信小程序地图(map)组件点击(tap)获取经纬度的方法

    2023-09-03 21:33:37
  • Mootools 1.2教程(22)——同时进行多个形变动画

    2008-12-29 14:11:00
  • 解决Django部署设置Debug=False时xadmin后台管理系统样式丢失

    2022-05-09 00:33:57
  • pytest内置fixture使用临时目录流程详解

    2021-12-27 06:49:23
  • SQL Server数据库连接中常见的错误分析

    2009-01-15 12:51:00
  • python opencv实现影像拼接

    2023-10-24 10:54:04
  • django之常用命令详解

    2023-02-04 07:25:19
  • Python ORM数据库框架Sqlalchemy的使用教程详解

    2024-01-13 20:02:53
  • 四种Python机器学习超参数搜索方法总结

    2022-03-19 17:29:22
  • python技能之数据导出excel的实例代码

    2022-09-21 15:01:53
  • Python常用库推荐

    2023-03-22 09:25:58
  • SQL Server正则表达式 替换函数应用详解

    2024-01-28 06:01:16
  • 现代Python编程的四个关键点你知道几个

    2023-11-22 02:17:42
  • SQL Server主键约束(PRIMARY KEY)

    2024-01-24 04:46:56
  • 比较SQL Server与Oracle、DB2三种数据库

    2008-09-12 17:24:00
  • 微信JSSDK调用微信扫一扫功能的方法

    2024-04-29 13:46:02
  • asp之家 网络编程 m.aspxhome.com