You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests在multipart/form-data中同时发送文件与表单数据

解决requests同时发送文件与表单数据(含文件数组)的问题

我太懂这种卡壳的挫败感了!明明单独发文件或表单都没问题,合在一起就报错,折腾几小时真的头大。别担心,我来给你捋捋几种靠谱的解决方案,包括文件数组的情况:

基础方案:同时发送单个文件+表单数据

其实requests本身就支持同时传data(表单)和files(文件)参数,关键是格式要正确。比如:

import requests

url = "你的目标接口URL"
form_data = {
    "username": "jobu1342",
    "description": "同时发送文件和表单"
}
# 单个文件:key要和后端要求的字段名一致
files = {
    "attachment": open("test.pdf", "rb")
}

# 更安全的写法:用with语句自动关闭文件
with open("test.pdf", "rb") as f:
    files = {"attachment": f}
    response = requests.post(url, data=form_data, files=files)

print(response.status_code)
print(response.text)

进阶:发送文件数组

如果需要传多个文件(数组形式),只需要把files改成列表格式,每个元素是元组,保持相同的key即可:

import requests

url = "你的目标接口URL"
form_data = {
    "batch_id": "12345",
    "note": "这是一批文件"
}
# 文件数组:每个元组的第一个元素是后端接收的字段名,第二个是文件对象
files = [
    ("attachments", open("file1.jpg", "rb")),
    ("attachments", open("file2.txt", "rb")),
    ("attachments", open("file3.csv", "rb"))
]

response = requests.post(url, data=form_data, files=files)

用requests_toolbelt的正确姿势

如果你试了toolbelt没成功,大概率是MultipartEncoder的用法不对。正确的做法是把表单数据和文件都放进encoder里,而不是分开传:

from requests_toolbelt.multipart.encoder import MultipartEncoder
import requests

url = "你的目标接口URL"
# 构建MultipartEncoder,包含表单和文件
encoder = MultipartEncoder(
    fields={
        "username": "jobu1342",
        "description": "用toolbelt发送混合数据",
        # 文件字段:元组格式是(文件名, 文件对象, 内容类型),可按需指定
        "attachments": ("file1.jpg", open("file1.jpg", "rb"), "image/jpeg"),
        "attachments": ("file2.txt", open("file2.txt", "rb"), "text/plain")
    }
)

# 请求头必须设置Content-Type为encoder的content_type
response = requests.post(url, data=encoder, headers={"Content-Type": encoder.content_type})

常见坑点排查

  • 后端接收的字段名一定要和你传的key完全一致(比如后端要file你传attachment肯定不行)
  • 打开文件必须用rb模式,避免编码问题
  • 如果表单数据里有中文或特殊字符,确保编码正确(requests默认会处理,若有问题可手动指定编码)
  • 检查文件路径是否正确,避免因文件找不到导致的隐性错误

内容的提问来源于stack exchange,提问作者jobu1342

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:15:48