python 文件上传模块 MultipartEncoder

本贴最后更新于 819 天前,其中的信息可能已经时移世异

一、下载第三方包

pip install requests_toolbelt

二、模块调用

from requests_toolbelt import MultipartEncoder

三、准备参数、处理请求头、发送请求

以我个人的项目为例:

  1. boundary需要生成 '----WebKitFormBoundaryPH6ZaA4wuABDm9BK'格式
  2. 文件上传入参存在多个字段

代码如下:

import random
import string
import requests
from requests_toolbelt import MultipartEncoder

def __handle_file_data(self, data, url):
  
    # 定义文件名称
    filename = f"autotest_{self.fk.random_int(min=10000, max=99999)}.xlsx"

    # 生成boundary
    boundary = '----WebKitFormBoundary' + ''.join(random.sample(string.ascii_letters + string.digits, 16))
  
    # 读取二进制文件
    with open(file="文件路径", mode="rb") as file:
        excel = file.read()

        """
        1 删除data中的file字段
        2 单独生成file的键值
        3 将file_data与data拼接在一起,生成新的data
        """
        del data['file']
        file_data = {"file": (filename, excel, "application/vnd.ms-excel")}
        file_data.update(data)
  
        # 将入参处理成文件上传模块需要的格式,其中file的值为元祖格式,元祖中第一个参数为文件名(可自定义),第二个参数是二进制文件,第三个参数为文件格式
        new_data = MultipartEncoder(fields=file_data, boundary=boundary)

        # 设置文件上传专用请求头
        self.headers["Content-Type"] = new_data.content_type

        # 发送请求
        response = requests.request(method=method, url=url, data=data, headers=self.headers, **kwargs)
  
        return response
回帖
请输入回帖内容 ...