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
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
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为一个元组(与普通接口不同的地方)
"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()
来源:https://www.cnblogs.com/caituotuo/p/16101337.html
标签:上传,下载,接口
0
投稿
猜你喜欢
页面重构中的模块化思维
2009-06-28 15:36:00
统计热门文章的算法
2008-03-16 15:40:00
ASP连接MySQL数据库的方法
2010-03-14 11:25:00
详解new function(){}和function(){}()
2008-02-28 12:28:00
学习Python爬虫的几点建议
2023-08-08 04:29:08
python tkinter canvas使用实例
2021-07-11 23:49:50
国外404错误页面的创意设计欣赏
2007-08-19 15:44:00
JS+ASP实现无刷新新闻列表方法
2007-08-22 12:44:00
ACCESS入门教程:初识Access 2000
2008-01-03 19:42:00
实现div可编辑的常见方法
2007-11-06 12:02:00
Python实现注册登录功能
2023-09-07 22:24:50
Python多线程正确用法实例解析
2022-03-22 14:31:58
Anaconda超详细保姆级安装配置教程
2022-09-06 08:11:50
Python+matplotlib实现华丽的文本框演示代码
2021-07-19 08:19:51
在SQL Server2000中恢复Master数据库
2008-01-05 14:05:00
运用ASP调用数据库中视图及存储过程
2008-02-03 15:33:00
Python依赖包迁移到断网环境操作
2021-06-27 06:58:29
python xlsxwriter创建excel图表的方法
2021-01-12 03:16:10
python flask 多对多表查询功能
2022-09-17 13:26:14
Python使用Asyncio实现检查网站状态
2023-01-23 18:56:39