将图片转Base64后通过XML-RPC客户端发送报错求助
解决XML-RPC发送Base64图片时的
bytes-like object错误 嘿,这个问题其实很好排查——你传给base64.b64encode()的是文件句柄对象(也就是_io.BufferedReader),但这个方法需要的是原始字节数据。XML-RPC服务器收到的不是编码后的有效内容,而是未处理的文件对象,自然会抛出类型不匹配的错误。
修复方案
你只需要先读取文件的字节内容,再进行Base64编码就行。修改后的代码如下:
import base64 with open(full_path, 'rb') as imgFile: # 先读取文件的全部字节内容 img_bytes = imgFile.read() # 对字节内容进行Base64编码 image = base64.b64encode(img_bytes)
额外小提示
imgFile.read()会把整个文件内容读取成bytes类型,这正是b64encode()需要的参数类型。- 如果你的图片体积特别大,担心内存占用,可以考虑分块读取编码,但对于大多数场景,直接读取整个文件是最简洁的方案。
- 编码后的
image是字节类型,XML-RPC通常可以直接处理;如果服务器明确要求字符串格式,你可以再调用image.decode('utf-8')转换成Base64字符串。
内容的提问来源于stack exchange,提问作者user2175784
相关产品推荐
相关产品推荐

