【问题标题】:Issue adding attachments to documents in CouchDB向 CouchDB 中的文档添加附件的问题
【发布时间】:2014-03-09 20:49:19
【问题描述】:

我在 CouchDB 中添加附件时遇到问题。首先,当我在 Futon 中运行测试套件时,我遇到了两个错误——一个在附件中,另一个在复制中。特定于附件的错误并不是特别有用 -

name
    attachments
status
    error
duration
    6112
details
    0
    Exception raised: {}

一些网络评论说测试套件中的一些错误是完全正常的,所以我继续前进。但是,附件肯定无法正常工作,无论是通过 Futon 还是 Curl。在蒲团中,文件通常会附加,但只有在我点击上传取消之后 - 即它无限期地挂在上传进度条上,直到我点击取消。我通过 ssh -L5984:127.0.0.1:5984 root@myServer 访问远程机器上的蒲团,然后将 Firefox 指向 localhost:5984/_utils/。我不知道这是否会有所作为。

当我尝试通过 Curl 上传时,使用命令

curl -vX PUT http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/ artwork.jpg?rev=9--43332bfae07884c683b50ffd4b8ee18c --data-binary @artwork.jpg -H "Content-Type: image/jpg"

我明白了:

主机:127.0.0.1:5984 接受:/ 内容类型:图片/jpg 内容长度:11205 期望:100-继续

< HTTP/1.1 100 Continue
< HTTP/1.1 400 Bad Request
* HTTP error before end of send, stop sending
{"error":"bad_request","reason":"invalid UTF-8 JSON"}

日志文件显示:

[debug] [<0.103.0>] 'PUT' /albums/6e1295ed6c29495e54cc05947f18c8af/ {1,1}
Headers: [{'Accept',"*/*"},
      {'Content-Length',"11205"},
      {'Content-Type',"image/jpg"},
      {"Expect","100-continue"},
      {'Host',"127.0.0.1:5984"},
      {'User-Agent',"curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3"}]

[debug] [<0.103.0>] OAuth Params: []

[error] [<0.103.0>] attempted upload of invalid JSON (set log_level to debug to log it)

后面是一大块——

[debug] [<0.103.0>] Invalid JSON:   
<<255,216,255,224,0,16,74,70,73,70,0,1,1,0,0,1,0,1,0,0,255,219,0,132, ... , etc

日志中与尝试上传相关的最后两行是

[info] [<0.103.0>] 127.0.0.1 - - 'PUT' /albums/6e1295ed6c29495e54cc05947f18c8af/ 400
[debug] [<0.103.0>] httpd 400 error response: {"error":"bad_request","reason":"invalid UTF-8 JSON"}

有人知道这里发生了什么吗?我尝试将 curl 请求中的字符串包裹在 ' ' 周围,以防 bash 吃掉引号,这没有任何区别。

【问题讨论】:

    标签: json couchdb couchdb-futon http-1.1


    【解决方案1】:

    在您的 curl 命令中,文档 ID 和附件之间的斜线后面有一个虚假空格:

    ...f18c8af/ artwork.jpg?...
               ^
    

    删除后是否有效?

    【讨论】:

    • 哇,我不敢相信我错过了。这是问题的一半,另一半是您在声明中放置 rev 详细信息的位置。我会发布它作为答案。
    • 哈哈!当我从 couchdb 指南中复制附件代码示例时,我遇到了同样的问题:guide.couchdb.org/editions/1/en/api.html |我很高兴我遇到了这个......
    【解决方案2】:

    有两个问题。首先是西蒙指出的虚假空间——tyvm。另一个问题是 rev-x 详细信息的放置位置。我使用的是http://guide.couchdb.org/editions/1/en/api.html 书中的格式。

    原始命令:

    curl -vX PUT http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/ artwork.jpg?rev=9--43332bfae07884c683b50ffd4b8ee18c --data-binary @artwork.jpg -H "Content-Type: image/jpg"
    

    工作命令(删除空格并按正确顺序放置):

    curl -vX PUT http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/attachment?rev=9-43332bfae07884c683b50ffd4b8ee18c --data-binary @artwork.jpg -H "Content-Type: image/jpg"
    

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多