通过Trello API上传base64字符串为图片时被识别为文本如何解决
问题原因
- 你本地存储的文件本身已经是图片的base64编码字符串,现有代码对其进行了二次base64编码,导致数据格式错误
- Trello API要求file参数是二进制数据,你直接传入了base64文本字符串,所以被识别为文本文件
- 参数
mimeType末尾多了一个无效空格,导致API无法正确识别格式参数 - 读取base64文件时不需要额外做编码转码操作,直接解码base64得到图片二进制数据即可
修正后代码
import requests import base64 key = "xxx" token = "yyy" url = "https://api.trello.com/1/cards/618390bbdc3cb10550c9912b/attachments" pathToFile = "C:/file" # 读取本地base64字符串 with open(pathToFile, "r", encoding="ascii") as f: img_base64_str = f.read().strip() # 直接解码base64得到png二进制数据 img_binary = base64.b64decode(img_base64_str) # 发起请求,指定文件的文件名、二进制内容和mimetype response = requests.post( url, params={'token': token, 'key': key}, files={'file': ('fisk.png', img_binary, 'image/png')} ) # 可选:打印返回结果检查是否成功 print(response.status_code) print(response.json())
核心改动说明
- 取消了原代码中多余的二次base64编码逻辑,直接对本地读取的base64字符串做解码,得到PNG图片的二进制数据
- 将二进制数据传入files参数,同时指定文件名和正确的mimetype
image/png,符合Trello API对multipart/form-data格式的要求 - 修正了参数名多余空格的错误,将mimetype配置放到files参数的元组中,更符合requests库的传参规范
内容的提问来源于stack exchange,提问作者Kresten
相关产品推荐
相关产品推荐

