Python requests上传文件与参数结合实战
版权申诉
195 浏览量
更新于2024-09-14
1
收藏 74KB PDF 举报
"Python requests库用于上传文件的实现方法,主要涉及HTTP POST请求以及multipart/form-data格式。在实际工作中,接口要求提供md5加密、文件大小和文件内容等字段。官方文档提供了基本的文件上传示例,但未涵盖带有额外参数的情况。在处理这种需求时,需要同时使用requests的data和files参数,将文件和其他非文件参数分开处理,合并成multipart数据进行发送。"
在Python中,`requests`库是一个非常强大的HTTP客户端,常用于发送网络请求。在本例中,我们需要实现上传文件到特定接口的功能。接口规定了上传文件的格式为`multipart/form-data`,并且需要提供三个字段:md5值、文件大小和文件内容。
首先,我们需要了解`multipart/form-data`是一种HTTP请求体的数据格式,常用于POST请求,特别是上传文件时。它将不同的数据部分分割,并且每个部分都有自己的边界,这样服务器就能解析并识别出各个字段。
官方文档中提供的例子展示了如何简单地上传文件:
```python
url = 'https://httpbin.org/post'
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
response = requests.post(url, files=files)
```
然而,当需要传递额外的非文件参数时,如md5和filesize,我们可以使用`data`参数。这样,`requests`库会自动将`data`和`files`中的内容合并为一个完整的`multipart/form-data`请求体。
下面是一个结合额外参数的完整实现示例:
```python
import requests
import time
import hashlib
# 假设已有的函数,用于获取文件信息
def get_file_info(file_name):
with open(file_name, 'rb') as f:
content = f.read()
md5_value = hashlib.md5(f'{0}_{int(time.time())}'.encode()).hexdigest() # 计算md5值
file_size = len(content)
return content, md5_value, file_size
# 文件名
file_name = 'example.txt'
# 获取文件信息
file_content, md5_value, file_size = get_file_info(file_name)
# 构建请求数据
request_data = {
'md5': md5_value,
'filesize': str(file_size),
}
# 使用requests发送POST请求
url = 'http://test.com/flow/upload'
files = {'file': (file_name, file_content, 'text/plain')} # 假设文件类型为文本
response = requests.post(url, data=request_data, files=files)
# 处理响应
if response.json().get('success'):
upload_name = response.json()['uploadName']
upload_path = response.json()['uploadPath']
print(f'文件上传成功,保存名为:{upload_name},路径为:{upload_path}')
else:
print('文件上传失败')
```
在这个示例中,我们首先读取文件内容并计算其md5值和大小。然后,我们创建一个字典`request_data`来存储这些额外的参数。在`files`字典中,我们包含文件名、文件内容和一个假定的MIME类型(在这里是'text/plain')。最后,通过`requests.post()`函数发送POST请求,将`data`和`files`一并传递。根据服务器返回的响应,我们可以判断文件是否上传成功,并获取上传后的文件名和路径。
2020-03-22 上传
2020-09-18 上传
2021-01-21 上传
2023-06-28 上传
2023-06-28 上传
2020-09-17 上传
点击了解资源详情
2023-03-16 上传
2020-09-19 上传
weixin_38516658
- 粉丝: 6
- 资源: 955
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫