欢迎访问宙启技术站
智能推送

使用urllib3.filepost模块实现Python中的文件上传和下载功能

发布时间:2023-12-16 17:23:08

在Python中,可以使用urllib3库的filepost模块来实现文件上传和下载功能。filepost模块提供了一个encode_multipart_formdata方法,用于将文件和其他表单数据编码成multipart/form-data格式的数据。下面是一个使用urllib3.filepost模块实现文件上传和下载功能的例子。

**文件上传示例:**

import urllib3
from urllib3.filepost import encode_multipart_formdata

def upload_file(url, file_path):
    # 创建一个urllib3的PoolManager对象
    http = urllib3.PoolManager()
    
    # 打开文件
    with open(file_path, 'rb') as file:
        file_data = file.read()
    
    # 生成文件的Content-Disposition头部,指定文件保存的文件名
    content_disposition = 'attachment; filename={}'.format(file_path)
    
    # 使用encode_multipart_formdata方法将文件和其他表单数据编码成multipart/form-data格式的数据
    fields = {'file': (file_path, file_data)}
    encoded_data, headers = encode_multipart_formdata(fields)
    
    # 添加Content-Disposition头部
    headers['Content-Disposition'] = content_disposition
    
    # 发送POST请求,上传文件
    response = http.request('POST', url, body=encoded_data, headers=headers)
    
    # 打印上传结果
    print(response.data.decode())

# 调用upload_file函数上传文件
upload_file('http://localhost:8000/upload', '/path/to/file.txt')

上述例子中,上传文件的函数upload_file接受一个URL和一个文件路径作为参数。它首先打开文件,并将文件内容读取到一个字节数组中。然后使用encode_multipart_formdata方法将文件和其他表单数据编码成multipart/form-data格式的数据。最后,使用urllib3库的PoolManager对象发送一个POST请求,将multipart/form-data数据作为请求体进行上传。

**文件下载示例:**

import urllib3

def download_file(url, save_path):
    # 创建一个urllib3的PoolManager对象
    http = urllib3.PoolManager()
    
    # 发送GET请求,下载文件
    response = http.request('GET', url)
    
    # 将文件保存到本地
    with open(save_path, 'wb') as file:
        file.write(response.data)
    
    # 打印下载结果
    print('文件已下载到:', save_path)

# 调用download_file函数下载文件
download_file('http://localhost:8000/download/file.txt', '/path/to/save/file.txt')

上述例子中,下载文件的函数download_file接受一个URL和一个保存文件路径作为参数。它使用urllib3库的PoolManager对象发送一个GET请求,获取文件的二进制数据,并将数据保存到指定的文件路径中。

通过以上示例,你可以使用urllib3.filepost模块实现Python中的文件上传和下载功能。