如何解决 'Bad request error' 以创建带附件的新 Cloudant 文档。

How to solve 'Bad request error' for creating new Cloudant doc with attachement .

我正在使用 Cloudant NoSQLDB 开发 python 客户端示例。对于比较简单的文档创建,还可以。但是,尝试将 base64 编码的文件作为 doc 的附件上传时,我 运行 遇到了一个我自己无法解决的问题。
请帮我。

这是我的代码。

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)

结果Error如下:

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 

(没有“_attachments”部分,它可以正常工作。)

补充信息。

在上面的代码中,行;

dataContent = dataContentb.decode()

是我解决 json 错误所需要的。这要感谢一篇文章,

虽然,我无法将 "ENCODING" 指定为本文中显示的 decode() 参数(因为导致 "not defined error"),我猜结果 据我所知,通过插入打印语句,dataContent 就可以了。

您是对的,但是有一个 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
    }
  }
}