CouchDB、Kanso、文件上传错误

Posted

技术标签:

【中文标题】CouchDB、Kanso、文件上传错误【英文标题】:CouchDB, Kanso, File Upload Error 【发布时间】:2013-07-13 11:28:15 【问题描述】:

我正在尝试在创建 CouchDB 文档时将它们附加到它们。

这是 html 代码:

<form>
  <input type="hidden" name="type" value="devtest"/>
  <input type="file" name="_attachments" id="picture" accept="image/*" multiple/>
  <button type="submit">Go</button>
</form>

这是处理上传的 JS 代码

$(document).on('submit', 'form', function(e) 

  e.preventDefault();

  var formdata = $(this).serializeObject(); // Provided by a pluign

  $(this).find(':file').each(function(k,v) 
    formdata[$(this).attr('name')] = $(this).val(); // Treating files
  );

  // Using the kanso db package
  m.db.current().saveDoc(
    formdata,
    function(err,res) 
      console.log('gna');
    );

);

这会产生以下错误 500 消息:

"error":"doc_validation","reason":"Bad special document member: _attachments"

我将 CouchDB 1.3.1 与 kanso 0.2.2 和 db 0.1.0 一起使用。

【问题讨论】:

【参考方案1】:

好吧,我想我已经想通了。我的两个假设被证明是根本错误的。首先,不能仅使用名为_attachments 的输入字段上传附件。其次,CouchDB 似乎不接受文件,除非它们应该附加到的文档已经存在。 (我可能在这个问题上错了,但它对我不起作用。)

以下是适合我的解决方案:

$(document).on('submit', '#userctl form', function(e) 

  e.preventDefault()
  var data = $(this).serializeObject();

  // Use the Kanso API to create a normal document without attachments
  m.db.current().saveDoc(
    data,
    function(err,res) 

      // Use ajaxSubmit provided by the jquery.forms plugin to submit the attachments
      $('#userctl form').ajaxSubmit(
        url:  m.db.current().url + '/' + res.id,
        data: 
          _rev: res.rev // Provide a revision, otherwise the upload fails
        ,
        success: function(res) 
          console.log(res);
        
      );

    
  );
);

这种方法需要以下两个插件:

jquery.form jquery.serializeObject

【讨论】:

以上是关于CouchDB、Kanso、文件上传错误的主要内容,如果未能解决你的问题,请参考以下文章

Erica CouchDB 重写

错误:无法从注册表中获取:kanso

我在哪里可以找到 couchdb 应用程序的列表?

php上传文件错误怎么解决

php上传文件常见错误

无法使用 Jmeter 中的上传文件上传图像 - 响应出现错误