使用Python向CouchDB上传图片附件出错:无法显示且长度异常
问题原因及解决方法
问题根源
你的代码存在两个关键错误:
- 附件内容传递错误:你将文件名字符串
'Scan.png'当作文件内容传给了put_attachment,导致CouchDB存储的是文件名文本而非图片二进制数据,所以长度显示为8(字符串'Scan.png'的字符数),图片自然无法正常显示。 - Content-Type设置错误:你额外添加了
;base64后缀,但直接传递二进制数据时不需要该标识,这会干扰CouchDB对内容的解析。
正确实现代码
需要先读取图片的二进制数据,再传递给put_attachment:
import couchdb # 连接CouchDB服务器 couch = couchdb.Server('http://a73657.berlin.de:5984') # 连接目标数据库 db = couch['vl'] # 指定目标文档ID doc_id = "test_file" # 获取文档对象 doc = db.get(doc_id) # 读取图片的二进制数据 with open('Scan.png', 'rb') as img_file: img_data = img_file.read() # 添加附件到文档 db.put_attachment(doc, img_data, filename='Scan.png', content_type="image/png")
代码说明
- 二进制读取文件:用
open('Scan.png', 'rb')以二进制模式读取图片,确保获取的是图片原始字节数据,而非文本内容。 - 参数传递规范:
put_attachment的第二个参数是附件的二进制内容,第三个参数是附件文件名,content_type直接设为image/png即可,无需额外的base64标识。 - 结果验证:执行后查看文档的
_attachments字段,length会显示为图片实际字节数,和Futon手动添加的一致,图片可正常显示。
内容的提问来源于stack exchange,提问作者Ute
相关产品推荐
相关产品推荐

