python实现requests发送/上传多个文件的示例

  • Post category:Python

下面我会给出一个完整的攻略,涵盖了 Python 实现 requests 发送/上传多个文件的示例。

首先需要先导入 requests 库,并安装好本地可用的 Flask 库(用于实现文件的上传)。下面是具体示例代码:

示例 1:上传单个文件

具体步骤如下:

  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)
  1. 接下来可以通过 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:上传多个文件

相比上传单个文件,上传多个文件需要稍作修改。具体步骤如下:

  1. 启动 Flask 服务,同上传单个文件示例。

  2. 由于需要上传多个文件,需要将文件打包成 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 方法是为了保留原有文件的文件名,并将其放在打包后的文件中。

  1. 打包完成后,我们就可以像上传单个文件一样,将打包后的文件上传到服务器上了。具体代码如下:
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 发送/上传多个文件的方法。