如何用Python的requests模块发送base64解码图片的multipart表单请求
解决requests发送base64解码图片的multipart/form-data问题
我来帮你搞定这个问题!你当前的代码没法成功发送文件,主要是两个关键问题导致的,咱们一步步修正:
问题1:手动设置了错误的Content-Type
当你使用requests.post的files参数时,requests会自动生成正确的multipart/form-data头部,包括必不可少的boundary(分隔符)。如果你手动在headers里指定content-type: multipart/form-data,会覆盖掉自动生成的带boundary的头部,服务器根本没法正确解析你的表单数据。
所以第一步:删掉headers里的content-type设置。
问题2:files参数格式不正确
你只传了解码后的字节数据,但requests需要更多信息来构造正确的文件字段。正确的格式应该是一个元组,包含三个元素:(文件名, 文件字节数据, 内容类型),这样服务器才能知道这是个什么类型的文件。
比如如果是JPG图片,就指定文件名和image/jpeg类型。
修正后的完整代码
import base64 import requests import json # 用with语句安全读取文件,自动关闭资源 with open("template.txt", "r") as ref_path: # 读取base64字符串,去掉可能的换行/空格 image_base64 = ref_path.read().strip() # 解码base64得到图片字节 decoded_image = base64.b64decode(image_base64) url = "https://example.com" # 去掉手动设置的Content-Type headers = {} # 构造正确的files字典:元组包含文件名、字节数据、内容类型 files = { 'file1': ('image.jpg', decoded_image, 'image/jpeg') } r = requests.post(url, headers=headers, files=files) print(json.loads(r.text))
额外注意事项
- 如果你的base64字符串来自文件,一定要用
.strip()去掉可能存在的换行符或空格,否则解码会失败。 - 用
with语句处理文件是最佳实践,避免忘记关闭文件导致资源泄漏。 - 内容类型(比如
image/jpeg、image/png)要和你的图片类型匹配,如果不确定,可以用image/octet-stream作为通用二进制类型。
内容的提问来源于stack exchange,提问作者Nikita Aplin
相关产品推荐
相关产品推荐

