下面我会给出一个完整的攻略,涵盖了 Python 实现 requests 发送/上传多个文件的示例。
首先需要先导入 requests 库,并安装好本地可用的 Flask 库(用于实现文件的上传)。下面是具体示例代码:
示例 1:上传单个文件
具体步骤如下:
- 首先需要启动一个 Flask 服务,以便后续上传文件时能够进行接收。具体代码如下:
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
file.save('./' + file.filename)
return 'success'
if __name__ == '__main__':
app.run(debug=True, port=8000)
- 接下来可以通过 requests 库的 post 方法进行上传,具体代码如下:
import requests
import os
url = "http://127.0.0.1:8000/upload"
file_path = os.path.abspath('./test.png')
files = {'file': open(file_path, 'rb')}
response = requests.post(url, files=files)
print(response.content.decode())
其中,我们通过 open 方法打开待上传的文件,再通过 post 方法将其上传到指定的服务器上。上传成功后,服务器会返回一个“success”字符串,我们可以通过 response.content.decode() 方法查看返回的内容。
示例 2:上传多个文件
相比上传单个文件,上传多个文件需要稍作修改。具体步骤如下:
-
启动 Flask 服务,同上传单个文件示例。
-
由于需要上传多个文件,需要将文件打包成 zip 格式,以便上传时能够一次性地传输所有文件。为了实现这个功能,我们可以使用如下代码:
import zipfile
import os
def zip_files(files, zip_name):
with zipfile.ZipFile(zip_name, 'w') as zf:
for file in files:
zf.write(file, os.path.basename(file))
return zip_name
其中,files 是待打包的所有文件列表,zip_name 是打包后的文件名。这里的 os.path.basename 方法是为了保留原有文件的文件名,并将其放在打包后的文件中。
- 打包完成后,我们就可以像上传单个文件一样,将打包后的文件上传到服务器上了。具体代码如下:
import requests
import os
url = "http://127.0.0.1:8000/upload"
files = {'file': open('./files.zip', 'rb')}
response = requests.post(url, files=files)
print(response.content.decode())
这里的 files.zip 是刚才使用 zip_files 方法打包的文件,我们将其打开,再通过 post 方法上传到服务器上即可。
以上就是实现 Python 中使用 requests 发送/上传多个文件的方法。