1

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"}

kanso 0.2.2 および db 0.1.0 で CouchDB 1.3.1 を使用しています。

4

1 に答える 1

1

わかりました。私はそれを理解したと思います。私の 2 つの仮定は、根本的に間違っていることが判明しました。まず、 という名前の入力フィールドだけを使用して添付ファイルをアップロードすることはできません_attachments。第 2 に、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);
        }
      });

    }
  );
});

このアプローチには、次の 2 つのプラグインが必要です。

于 2013-07-13T20:38:36.700 に答える