我正在使用Cloudant NoSQLDB处理python客户端示例。对于相对简单的文档创建,没关系。但是,尝试上传base64编码文件作为doc的附件,我遇到了一个我自己无法解决的问题。
请帮我。
这是我的代码。
"String from service"
结果错误如下:
from cloudant.client import Cloudant
from cloudant.error import CloudantException
from cloudant.result import Result,ResultByKey
import base64
.
.
.
client.connect()
databaseName = "mydata1"
myDatabase = client[databaseName]
targetfile = "chibitest.png"
with open(targetfile,"rb") as fp:
byte_content = fp.read()
dataContentb= base64.b64encode(byte_content)
dataContent = dataContentb.decode()
jsonDoc = {
"nameField": "sample1",
"_attachements":{
targetfile:
{"content-type":"image/png",
"data":dataContent}
}
}
newDocument = myDatabase.create_document(jsonDoc)
(没有“_attachements”部分,它可以正常工作。)
其他信息。
在上面的代码中,行;
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request doc_validation Bad
special document member: _attachements for url:https://.....cloudant.com/mydata1
是解决json错误所需要的。这要归功于一篇文章Serialize in JSON a base64 encoded data
虽然,我无法将“ENCODING”指定为本文所示的decode()参数(因为导致“未定义的错误”),我猜测结果 通过插入print语句,我可以看到dataContent。
答案 0 :(得分:0)
您的排名正确,但有一个put_attachment方法专门用于将附件上传到现有文档。
这是一些工作代码
from cloudant.client import Cloudant
import base64
# connect
client = Cloudant('USER', 'PASS', account='ACCOUNT', connect=True)
session = client.session()
# create database
my_database = client.create_database('so46442945')
# load attachment
targetfile = "dog.png"
with open(targetfile,"rb") as fp:
byte_content = fp.read()
dataContentb= base64.b64encode(byte_content)
dataContent = dataContentb.decode()
# Create a document using the Database API
jsonDoc = {
'_id': 'mydoc',
'name': 'Julia',
'age': 30,
'pets': ['cat', 'dog', 'frog']
}
my_document = my_database.create_document(jsonDoc)
# Add attachment
my_document.put_attachment('dog.png', 'image/png', dataContent)
# disconnect
client.disconnect()
这将创建一个数据库,添加一个文档,然后上传一个图像附件。脚本完成后,文档如下所示:
{
"_id": "mydoc",
"_rev": "2-0649fa69ed362501f97a328e4e81ee21",
"age": 30,
"name": "Julia",
"pets": [
"cat",
"dog",
"frog"
],
"_attachments": {
"dog.png": {
"content_type": "image/png",
"revpos": 2,
"digest": "md5-l5CNi8JJBiQjUd+cS1ZFng==",
"length": 436572,
"stub": true
}
}
}