二进制方式读取文件,赋值给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,不然就会上传不成功,因为后端服务会以这个名称去接收数据...

  1. m是接收MultipartEncoder对象

  2. m.content_type指定Content-Type的方式为:multipart/form-data

  3. 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

更多内容欢迎关注公众号

接口自动化:文件上传及下载相关推荐

  1. layui上传文件请求接口异常_SpringMVC实现文件上传与下载,拦截器,异常处理

    第一章:响应数据和结果视图 1. 返回字符串 Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址. @RequestMapping(value="/he ...

  2. Springboot中常用的文件上传和下载通用接口

    记录下通用的文件上传和下载接口,一般的开发中都是会使用到的,不过写的最简单的版本. 文章目录 程序测试 本文小结 程序测试 在yml中配置一个文件保存的路径 #保存文件的路径 common:file: ...

  3. 文件上传,下载,预览,删除(File),分页接口

    文件上传,下载,预览,删除(File) 1.公共参数方法 1.1公共返回类型定义 1.2 分页接口 1.3公共实体类 1.4 公共的 mapper.java/xml(都放在一起) 1.4.1 File ...

  4. Angular 文件上传与下载

    Angular文件上传与下载 文件上传 方式1 使用NG ZORRO中的组件. 文件下载 方式1 直接下载 方式2 通过HTTP请求后端数据的方式进行下载 文件上传 方式1 使用NG ZORRO中的组 ...

  5. [转载]ASP.NET Core文件上传与下载(多种上传方式)

    ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...

  6. 一篇文章教你学会使用SpringBoot实现文件上传和下载

    文章目录 一.搭建SpringBoot开发环境 1.创建项目 2.配置application.properties参数 3.实体响应类和异常信息类 4.创建FileController 二.接口测试 ...

  7. Dubbo + RestEasy 实现文件上传与下载

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Dubbo+RestEasy实现文件上传与下载 Dubbo+RestEasy实现文件上传与下载 Ma ...

  8. Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL

    Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...

  9. springBoot 简单优雅是实现文件上传和下载

    前言 好久没有更新spring Boot 这个项目了.最近看了一下docker 的知识,后期打算将spring boot 和docker 结合起来.刚好最近有一个上传文件的工作呢,刚好就想起这个脚手架 ...

  10. 小汤学编程之JavaEE学习day05——会话管理、文件上传与下载、Ajax

    一.会话管理 1.HTTP协议     2.会话的概念     3.会话跟踪技术     4.会话跟踪技术分类(四种) 二.文件上传与下载 1.上传     2.下载     3.上传和下载合并优化成 ...

最新文章

  1. TVM适配NN编译Compiler缺陷
  2. 厦门再次加大引才力度!博士补贴8万,硕士5万,本科3万!
  3. 昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了
  4. mac ssh远程登录linux,MAC使用SSH远程登录
  5. jQuery源码解析(5)—— Animation动画
  6. c 语言比较三个整数大小,C 语言 —— 比较三个整数的大小并从大到小输出
  7. lLinux编程大全
  8. 【AtCoder】ARC090
  9. eMMC基础技术2:eMMC概述
  10. Linux ag命令
  11. FPGA入门——初学建议
  12. 第一次~通过MockingBird进行声音模仿的感悟
  13. 独立站SaaS建站模式是什么
  14. Failure [INSTALL_FAILED_INVALID_APK]
  15. java二维数组货柜,装箱布局三维可视化控件开发sup*/sup
  16. python画简便的图片-用python简单处理图片(5):图像直方图
  17. 是时候转移百度网盘的文件了 MultCloud 来帮忙
  18. 【少样本图像生成】Towards Faster And Stabilized GAN training for high-fidelity few-shot image synthesis
  19. Firefox(火狐浏览器)常用插件
  20. r与python的区别和联系-Python和R语言的区别?

热门文章

  1. Revit(8)-数据结构-类别、族概念
  2. 半导体设备英文缩写_科创市值风云系列:半导体设备龙头——中微公司
  3. android7.0夜间模式,微信7.0夜间模式
  4. skyWalking使用APM包部署
  5. 西门子1200PLC与手机TCP通信
  6. 基于综合需求响应和奖惩阶梯型碳交易的综合能源系统优化调度 MATLAB复现
  7. untiy 一个逗比并且有无聊的游戏制作
  8. 火影忍者手游服务器无响应,火影忍者手游安卓闪退游戏无响应解决教程
  9. “数组、矩阵与广义表”学习提纲
  10. 大数据有哪些“学历”证书