首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CouchDB、Kanso、文件上传错误

CouchDB、Kanso、文件上传错误
EN

Stack Overflow用户
提问于 2013-07-13 19:28:15
回答 1查看 295关注 0票数 1

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

这是HTML代码:

代码语言:javascript
复制
<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代码

代码语言:javascript
复制
$(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消息:

代码语言:javascript
复制
{"error":"doc_validation","reason":"Bad special document member: _attachments"}

我使用的是CouchDB 1.3.1和kanso 0.2.2和db 0.1.0。

EN

回答 1

Stack Overflow用户

发布于 2013-07-14 04:38:37

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

以下是对我有效的解决方案:

代码语言:javascript
复制
$(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);
        }
      });

    }
  );
});

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17629751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档