接口自动化:文件上传及下载
二进制方式读取文件,赋值给files变量
files = {'file': open('导入部门.xlsx', 'rb')}
with requests.Session() as s:files = {'file': open('导入部门.xlsx', 'rb')}url = "https://xxxxx/company/department/excel"s.headers.update({'token': "59822613c9d577736eb3e87ffc5d1980"})response = s.post(url, files=files, verify=False)print(response.text)
或者明确文件名、内容类型和标题
files = {'file': ('导入部门.xlsx', open('导入部门.xlsx', 'rb'), 'application/vnd.ms-excel')}
with requests.Session() as s:files = {'file': ('导入部门.xlsx', open('导入部门.xlsx', 'rb'), 'application/vnd.ms-excel')}url = "https://xxxxx/company/department/excel"s.headers.update({'token': "487394541b455fd673382342be8ec11c"})response = s.post(url, files=files)print(response.text)
如果你的文件特别大,是以multipart/form-data方式请求的话,那就要以流形式上传文件了...
首先安装第三方库
pip install requests-toolbelt
其次观看官方栗子
m = MultipartEncoder(fields={'field0': 'value', 'field1': 'value','field2': ('filename', open('file.py', 'rb'), 'text/plain')})r = requests.post('http://httpbin.org/post', data=m,headers={'Content-Type': m.content_type})
参数解释:
field0和field1是key,是根据接口给的字段定义,value是接口字段对应的值
field2也是key,也是根据接口给的字段定义的;filename是所上传文件的名称,
file.py是指文件的路径,路径后必须要加上文件名及文件的后缀名,
rb是指定二进制格式读取文件数据
text/plain是指定上传文件的类型,例如excel的类型: application/vnd.ms-excel
如图显示,如果接口就给了一个字段,字段名称为file,那field2就得叫file,不然就会上传不成功,因为后端服务会以这个名称去接收数据...
m是接收MultipartEncoder对象
m.content_type指定Content-Type的方式为:multipart/form-data
content_type方法的默认值是multipart/form-data,是属于MultipartEncoder类中的一个方法,用于设置头信息的Content-Type
# 部分源码@propertydef content_type(self):return str('multipart/form-data; boundary={0}'.format(self.boundary_value))
以流文件上传示例如下
import requests
from requests_toolbelt import MultipartEncoderwith requests.Session() as s:url = "https://xxxxx/company/department/excel"s.headers.update({'token': "486394541b455fd673382342be8ec11c"})m = MultipartEncoder(fields={'file': ("导入部门.xlsx", open('导入部门.xlsx', 'rb'), 'application/vnd.ms-excel')})response = s.post(url, data=m, headers= {'Content-Type': m.content_type})print(response.text)
{"status":1,"data":{"list":[{"line":3,"value":"人力资源中心/培训部"}],"count":1,"type":"department"},"errMsg":"","errCode":0,"script":{"start_time":1623927576.440872,"end_time":1623927576.487837,"duration":"46.95916"}}Process finished with exit code 0
这样以流数据方式上传就完成了,相比第一个方法而言这个确实比较麻烦些,但是使用起来还是很好的,大小文件均可以上传,不用有大文件上传不了的顾虑...
对比上传文件的话,下载保存就很简单了......
先看官方栗子
with open(filename, 'wb') as fd:for chunk in r.iter_content(chunk_size=128):fd.write(chunk)
参数解释:
open打开指定下载的文件名,赋值给fd
iter_content是自动解码及传输编码,也就是遍历,一块一块的下载
chunk_size是指定文件大小,如果为空会默认获取文件大小,默认值就是None
fd.write(chunk)是把数据一块一块的写入到文件中
以stream模式下载文件
with requests.Session() as s:url = "https://xxxxx/company/department/excel"# file = os.path.join(os.getcwd(), '导入人员.xlsx')s.headers.update({'token': "433394541b455fd673382342be8ec11c"})response = s.get(url, stream=True)with open('导出部门.xlsx', 'wb') as save_file:for chunk in response.iter_content():save_file.write(chunk)
stream 的值为True时,是在数据到达时读取其大小块,也就是一块一块的读返。如果stream=False时则返回为一个块,也就是一下子把所有数据返回过来,如果文件过大的话,就会抛出内存不足的情况......
至此,文件上传下载完成...
以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;感觉还不错记得点赞呦,谢谢!
未完,待续…
一直都在努力,希望您也是!
微信搜索公众号:就用python
接口自动化:文件上传及下载相关推荐
- layui上传文件请求接口异常_SpringMVC实现文件上传与下载,拦截器,异常处理
第一章:响应数据和结果视图 1. 返回字符串 Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址. @RequestMapping(value="/he ...
- Springboot中常用的文件上传和下载通用接口
记录下通用的文件上传和下载接口,一般的开发中都是会使用到的,不过写的最简单的版本. 文章目录 程序测试 本文小结 程序测试 在yml中配置一个文件保存的路径 #保存文件的路径 common:file: ...
- 文件上传,下载,预览,删除(File),分页接口
文件上传,下载,预览,删除(File) 1.公共参数方法 1.1公共返回类型定义 1.2 分页接口 1.3公共实体类 1.4 公共的 mapper.java/xml(都放在一起) 1.4.1 File ...
- Angular 文件上传与下载
Angular文件上传与下载 文件上传 方式1 使用NG ZORRO中的组件. 文件下载 方式1 直接下载 方式2 通过HTTP请求后端数据的方式进行下载 文件上传 方式1 使用NG ZORRO中的组 ...
- [转载]ASP.NET Core文件上传与下载(多种上传方式)
ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...
- 一篇文章教你学会使用SpringBoot实现文件上传和下载
文章目录 一.搭建SpringBoot开发环境 1.创建项目 2.配置application.properties参数 3.实体响应类和异常信息类 4.创建FileController 二.接口测试 ...
- Dubbo + RestEasy 实现文件上传与下载
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Dubbo+RestEasy实现文件上传与下载 Dubbo+RestEasy实现文件上传与下载 Ma ...
- Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL
Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...
- springBoot 简单优雅是实现文件上传和下载
前言 好久没有更新spring Boot 这个项目了.最近看了一下docker 的知识,后期打算将spring boot 和docker 结合起来.刚好最近有一个上传文件的工作呢,刚好就想起这个脚手架 ...
- 小汤学编程之JavaEE学习day05——会话管理、文件上传与下载、Ajax
一.会话管理 1.HTTP协议 2.会话的概念 3.会话跟踪技术 4.会话跟踪技术分类(四种) 二.文件上传与下载 1.上传 2.下载 3.上传和下载合并优化成 ...
最新文章
- TVM适配NN编译Compiler缺陷
- 厦门再次加大引才力度!博士补贴8万,硕士5万,本科3万!
- 昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了
- mac ssh远程登录linux,MAC使用SSH远程登录
- jQuery源码解析(5)—— Animation动画
- c 语言比较三个整数大小,C 语言 —— 比较三个整数的大小并从大到小输出
- lLinux编程大全
- 【AtCoder】ARC090
- eMMC基础技术2:eMMC概述
- Linux ag命令
- FPGA入门——初学建议
- 第一次~通过MockingBird进行声音模仿的感悟
- 独立站SaaS建站模式是什么
- Failure [INSTALL_FAILED_INVALID_APK]
- java二维数组货柜,装箱布局三维可视化控件开发sup*/sup
- python画简便的图片-用python简单处理图片(5):图像直方图
- 是时候转移百度网盘的文件了 MultCloud 来帮忙
- 【少样本图像生成】Towards Faster And Stabilized GAN training for high-fidelity few-shot image synthesis
- Firefox(火狐浏览器)常用插件
- r与python的区别和联系-Python和R语言的区别?
热门文章
- Revit(8)-数据结构-类别、族概念
- 半导体设备英文缩写_科创市值风云系列:半导体设备龙头——中微公司
- android7.0夜间模式,微信7.0夜间模式
- skyWalking使用APM包部署
- 西门子1200PLC与手机TCP通信
- 基于综合需求响应和奖惩阶梯型碳交易的综合能源系统优化调度 MATLAB复现
- untiy 一个逗比并且有无聊的游戏制作
- 火影忍者手游服务器无响应,火影忍者手游安卓闪退游戏无响应解决教程
- “数组、矩阵与广义表”学习提纲
- 大数据有哪些“学历”证书