requests上传文件
目录requests库中的files参数可以用来上传文件,它是一个字典类型的变量,其中键是文件的字段名,值可以是以下几种类型之一:
-
字符串类型:表示文件路径,会自动打开文件并上传
-
文件对象:可以通过 open() 函数获取
-
元组类型:第一个元素是文件名,第二个元素是文件对象
-
或者files是一个List[Dict] 一个嵌套列表
单文件上传
下面是一个使用files参数上传单个文件的例子
import requests
url = 'http://example.com/upload'
files = {'file': open('example.txt', 'rb')}
headers = {'content-type': 'multipart/form-data'}
response = requests.post(url, files=files, headers=headers)
多文件上传
如果要上传多个文件,可以在files参数中添加多个键值对,如下所示:
import requests
url = 'http://example.com/upload'
files = {'file1': open('example1.txt', 'rb'),
'file2': open('example2.txt', 'rb'),
'file3': open('example3.txt', 'rb')
}
response = requests.post(url, files=files)
# 或者采用LIST
import requests
url = 'http://example.com/upload'
files = [
('file1', ('example1.txt', open('example1.txt', 'rb'))),
('file2', ('example2.txt', open('example2.txt', 'rb'))),
('file3', ('example3.txt', open('example3.txt', 'rb')))
]
response = requests.post(url, files=files)
指定文件和类型
如果上传的文件是二进制文件,需要以二进制模式打开文件(即添加'rb'
参数)。另外,如果上传的文件是图片或者其他媒体类型,可以在请求头中添加Content-Type
字段来指定文件类型,例如:
import requests
url = 'http://example.com/upload'
headers = {'Content-Type': 'image/jpeg'}
files = {'file': ('example.jpg', open('example.jpg', 'rb'), 'image/jpeg')}
response = requests.post(url, headers=headers, files=files)
上面的例子中,将文件类型设置为image/jpeg
,并且在文件元组中指定了文件名和文件类型。
既要上传文件又要上传参数
import requests
url = 'http://example.com/upload_file'
file_path = '/path/to/file'
data = {'name': 'John', 'age': 30}
with open(file_path, 'rb') as f:
files = {'file': f}
headers = {'content-type': 'multipart/form-data'}
response = requests.request('POST', url, files=files, data=data, headers=headers)
print(response.text)
文件接收
可以使用Flask的request对象来接收上传的文件。以下是一个示例,假设上传的文件字段名为file
:
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload_file():
file = request.files['file']
# 保存文件到本地
file.save('uploaded_file.txt')
return 'File uploaded successfully'
if __name__ == '__main__':
app.run()
在上面的代码中,我们使用request.files
字典来获取上传的文件,然后使用save()
方法将文件保存到本地。注意,save()
方法需要指定保存的文件路径和文件名。如果上传的文件是二进制文件,可以使用stream=True
参数来获取文件的二进制内容,例如:
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload_file():
file = request.files['file']
# 获取二进制内容并保存到本地
with open('uploaded_file.bin', 'wb') as f:
f.write(file.stream.read())
return 'File uploaded successfully'
if __name__ == '__main__':
app.run()