Python requests上传文件与参数结合实战
版权申诉
174 浏览量
更新于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 上传
weixin_38516658
- 粉丝: 6
- 资源: 955
最新资源
- python大数据等汇总.zip
- datastructures_algorithms
- Programs.rar_数学计算_C/C++_
- AlphaTrack PRO-开源
- canvas-sketch-render-service:基于HyperDrive的HyperSource服务,可将Canvas Sketch项目转换为生产包
- Magento-Import-Export:该脚本将导出和导入属性,集和产品
- 人工智能实验 个人作业.zip
- VedioSave.rar_视频捕捉/采集_Visual_C++_
- 5个电子字符
- Voldemort271.github.io:..
- 人工智能学习.zip
- cds-file-upload-frontend
- VB三角形动画窗体
- OpenCV.zip_Windows_CE_Visual_C++_
- parks_and_ride_project
- pythonTOexcel.zip