<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>How to manage documents? &mdash; JIO 2.0.0 documentation</title>
    
    <link rel="stylesheet" href="_static/default.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '2.0.0',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <link rel="top" title="JIO 2.0.0 documentation" href="index.html" />
    <link rel="next" title="Revision Storages: Conflicts and Resolution" href="revision_storages.html" />
    <link rel="prev" title="Downloads" href="download.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="revision_storages.html" title="Revision Storages: Conflicts and Resolution"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="download.html" title="Downloads"
             accesskey="P">previous</a> |</li>
        <li><a href="index.html">JIO 2.0.0 documentation</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="how-to-manage-documents">
<h1>How to manage documents?<a class="headerlink" href="#how-to-manage-documents" title="Permalink to this headline">¶</a></h1>
<p>JIO is mapped after the CouchDB API and extends them to provide unified, scalable
and high performance access via Javascript to a wide variety of different
storage backends.</p>
<p>If you are unfamiliar with <a class="reference external" href="http://couchdb.apache.org/">Apache CouchDB</a>:
it is a scalable, fault-tolerant, and schema-free document-oriented database.
It is used in large and small organizations for a variety of applications where
traditional SQL databases are not the best solution for the problem at hand.
CouchDB provides a RESTful HTTP/JSON API accessible by many programming
libraries and tools (like <a class="reference external" href="http://curl.haxx.se/">curl</a> or <a class="reference external" href="http://pouchdb.com/">Pouchdb</a>)
and has its own conflict management system.</p>
<div class="section" id="what-is-a-document">
<h2>What is a document?<a class="headerlink" href="#what-is-a-document" title="Permalink to this headline">¶</a></h2>
<p>A document is an association of metadata and attachment(s). The metadata is the
set of properties of the document and the attachments are the binaries of the content
of the document.</p>
<p>In jIO, metadata is just a dictionnary with keys and values (JSON object), and
attachments are just simple strings.</p>
<div class="highlight-javascript"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6</pre></div></td><td class="code"><div class="highlight"><pre><span class="p">{</span>
    <span class="c1">// document metadata</span>
    <span class="s2">&quot;_id&quot;</span>   <span class="o">:</span> <span class="s2">&quot;Identifier&quot;</span><span class="p">,</span>
    <span class="s2">&quot;title&quot;</span> <span class="o">:</span> <span class="s2">&quot;A Title!&quot;</span><span class="p">,</span>
    <span class="s2">&quot;creator&quot;</span><span class="o">:</span> <span class="s2">&quot;Mr.Author&quot;</span>
<span class="p">}</span>
</pre></div>
</td></tr></table></div>
<p>You can also retrieve document attachment metadata in this object.</p>
<div class="highlight-javascript"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14</pre></div></td><td class="code"><div class="highlight"><pre><span class="p">{</span>
    <span class="c1">// document metadata</span>
    <span class="s2">&quot;_id&quot;</span>   <span class="o">:</span> <span class="s2">&quot;Identifier&quot;</span><span class="p">,</span>
    <span class="s2">&quot;title&quot;</span> <span class="o">:</span> <span class="s2">&quot;A Title!&quot;</span><span class="p">,</span>
    <span class="s2">&quot;creator&quot;</span><span class="o">:</span> <span class="s2">&quot;Mr.Author&quot;</span><span class="p">,</span>
    <span class="s2">&quot;_attachments&quot;</span><span class="o">:</span> <span class="p">{</span>
        <span class="c1">// attachment metadata</span>
        <span class="s2">&quot;body.html&quot;</span><span class="o">:</span> <span class="p">{</span>
            <span class="s2">&quot;length&quot;</span><span class="o">:</span> <span class="mi">12893</span><span class="p">,</span>
            <span class="s2">&quot;digest&quot;</span><span class="o">:</span> <span class="s2">&quot;sha256-XXXX...&quot;</span><span class="p">,</span>
            <span class="s2">&quot;content_type&quot;</span><span class="o">:</span> <span class="s2">&quot;text/html&quot;</span>
        <span class="p">}</span>
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table></div>
<p><a class="reference internal" href="metadata.html#metadata-head"><em>Here</em></a> is a draft about metadata to use with jIO.</p>
</div>
<div class="section" id="basic-methods">
<h2>Basic Methods<a class="headerlink" href="#basic-methods" title="Permalink to this headline">¶</a></h2>
<p>Below you can find sample calls of the main jIO methods. All examples are using
revisions (as in revision storage or replicate revision storage), so you can
see how method calls should be made with either of these storages.</p>
<div class="highlight-javascript"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50</pre></div></td><td class="code"><div class="highlight"><pre><span class="c1">// Create a new jIO instance</span>
<span class="kd">var</span> <span class="nx">jio_instance</span> <span class="o">=</span> <span class="nx">jIO</span><span class="p">.</span><span class="nx">newJio</span><span class="p">(</span><span class="nx">storage</span> <span class="nx">tree</span> <span class="nx">description</span><span class="p">);</span>

<span class="c1">// create and store new document</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">post</span><span class="p">({</span><span class="s2">&quot;title&quot;</span><span class="o">:</span> <span class="s2">&quot;some title&quot;</span><span class="p">}).</span>
  <span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// console.log(response);</span>
  <span class="p">});</span>

<span class="c1">// create or update an existing document</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">put</span><span class="p">({</span><span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_document&quot;</span><span class="p">,</span> <span class="s2">&quot;title&quot;</span><span class="o">:</span> <span class="s2">&quot;New Title&quot;</span><span class="p">}).</span>
  <span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// console.log(response);</span>
  <span class="p">});</span>

<span class="c1">// add an attachment to a document</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">putAttachment</span><span class="p">({</span><span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_document&quot;</span><span class="p">,</span> <span class="s2">&quot;_attachment&quot;</span><span class="o">:</span> <span class="s2">&quot;its_attachment&quot;</span><span class="p">,</span>
                            <span class="s2">&quot;_data&quot;</span><span class="o">:</span> <span class="s2">&quot;abc&quot;</span><span class="p">,</span> <span class="s2">&quot;_mimetype&quot;</span><span class="o">:</span> <span class="s2">&quot;text/plain&quot;</span><span class="p">}).</span>
  <span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// console.log(response);</span>
  <span class="p">});</span>

<span class="c1">// read a document</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">get</span><span class="p">({</span><span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_document&quot;</span><span class="p">}).</span>
  <span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// console.log(response);</span>
  <span class="p">});</span>

<span class="c1">// read an attachment</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">getAttachment</span><span class="p">({</span><span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_document&quot;</span><span class="p">,</span> <span class="s2">&quot;_attachment&quot;</span><span class="o">:</span> <span class="s2">&quot;its_attachment&quot;</span><span class="p">}).</span>
  <span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// console.log(response);</span>
  <span class="p">});</span>

<span class="c1">// delete a document and its attachment(s)</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">remove</span><span class="p">({</span><span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_document&quot;</span><span class="p">}).</span>
  <span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// console.log(response):</span>
  <span class="p">});</span>

<span class="c1">// delete an attachment</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">removeAttachment</span><span class="p">({</span><span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_document&quot;</span><span class="p">,</span> <span class="s2">&quot;_attachment&quot;</span><span class="o">:</span> <span class="s2">&quot;its_attachment&quot;</span><span class="p">}).</span>
  <span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// console.log(response):</span>
  <span class="p">});</span>

<span class="c1">// get all documents</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">allDocs</span><span class="p">().</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// console.log(response):</span>
<span class="p">});</span>
</pre></div>
</td></tr></table></div>
</div>
<div class="section" id="promises">
<h2>Promises<a class="headerlink" href="#promises" title="Permalink to this headline">¶</a></h2>
<p>Each JIO methods returns a Promise object, which allows us to get responses into
callback parameters and to chain callbacks with other returned values.</p>
<p>JIO uses a custom version of <a class="reference external" href="https://github.com/tildeio/rsvp.js">RSVP.js</a>, adding canceler and progression features.</p>
<p>You can read more about promises:</p>
<blockquote>
<div><ul class="simple">
<li><a class="reference external" href="https://github.com/tildeio/rsvp.js#rsvpjs--">github RSVP.js</a></li>
<li><a class="reference external" href="http://promisesaplus.com/">Promises/A+</a></li>
<li><a class="reference external" href="http://wiki.commonjs.org/wiki/Promises">CommonJS Promises</a></li>
</ul>
</div></blockquote>
</div>
<div class="section" id="method-options-and-callback-responses">
<h2>Method Options and Callback Responses<a class="headerlink" href="#method-options-and-callback-responses" title="Permalink to this headline">¶</a></h2>
<p>To retrieve JIO responses, you have to provide callbacks like this:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span class="nx">jio_instance</span><span class="p">.</span><span class="nx">post</span><span class="p">(</span><span class="nx">metadata</span><span class="p">,</span> <span class="p">[</span><span class="nx">options</span><span class="p">]).</span>
    <span class="nx">then</span><span class="p">([</span><span class="nx">responseCallback</span><span class="p">],</span> <span class="p">[</span><span class="nx">errorCallback</span><span class="p">],</span> <span class="p">[</span><span class="nx">progressionCallback</span><span class="p">]);</span>
</pre></div>
</div>
<ul class="simple">
<li>On command success, responseCallback will be called with the JIO response as first parameter.</li>
<li>On command error, errorCallback will be called with the JIO error as first parameter.</li>
<li>On command notification, progressionCallback will be called with the storage notification.</li>
</ul>
<p>Here is a list of responses returned by JIO according to methods and options:</p>
<table border="1" class="docutils">
<colgroup>
<col width="19%" />
<col width="32%" />
<col width="49%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Option</th>
<th class="head">Available for</th>
<th class="head">Response (Callback first parameter)</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>No options</td>
<td>post, put, remove</td>
<td><div class="first last highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;result&quot;</span><span class="o">:</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span>
  <span class="s2">&quot;method&quot;</span><span class="o">:</span> <span class="s2">&quot;post&quot;</span><span class="p">,</span>
  <span class="c1">// or put or remove</span>
  <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_doc_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;status&quot;</span><span class="o">:</span> <span class="mi">204</span><span class="p">,</span>
  <span class="s2">&quot;statusText&quot;</span><span class="o">:</span> <span class="s2">&quot;No Content&quot;</span>
<span class="p">}</span>
</pre></div>
</div>
</td>
</tr>
<tr class="row-odd"><td>No options</td>
<td>putAttachment, removeAttachment</td>
<td><div class="first last highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;result&quot;</span><span class="o">:</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span>
  <span class="s2">&quot;method&quot;</span><span class="o">:</span> <span class="s2">&quot;putAttachment&quot;</span><span class="p">,</span>
  <span class="c1">// or removeAttachment</span>
  <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_doc_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;attachment&quot;</span><span class="o">:</span> <span class="s2">&quot;my_attachment_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;status&quot;</span><span class="o">:</span> <span class="mi">204</span><span class="p">,</span>
  <span class="s2">&quot;statusText&quot;</span><span class="o">:</span> <span class="s2">&quot;No Content&quot;</span>
<span class="p">}</span>
</pre></div>
</div>
</td>
</tr>
<tr class="row-even"><td>No options</td>
<td>get</td>
<td><div class="first last highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;result&quot;</span><span class="o">:</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span>
  <span class="s2">&quot;method&quot;</span><span class="o">:</span> <span class="s2">&quot;get&quot;</span><span class="p">,</span>
  <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_doc_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;status&quot;</span><span class="o">:</span> <span class="mi">200</span><span class="p">,</span>
  <span class="s2">&quot;statusText&quot;</span><span class="o">:</span> <span class="s2">&quot;Ok&quot;</span><span class="p">,</span>
  <span class="s2">&quot;data&quot;</span><span class="o">:</span> <span class="p">{</span>
    <span class="c1">// Here, the document metadata</span>
  <span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
</td>
</tr>
<tr class="row-odd"><td>No options</td>
<td>getAttachment</td>
<td><div class="first last highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;result&quot;</span><span class="o">:</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span>
  <span class="s2">&quot;method&quot;</span><span class="o">:</span> <span class="s2">&quot;getAttachment&quot;</span><span class="p">,</span>
  <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_doc_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;attachment&quot;</span><span class="o">:</span> <span class="s2">&quot;my_attachment_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;status&quot;</span><span class="o">:</span> <span class="mi">200</span><span class="p">,</span>
  <span class="s2">&quot;statusText&quot;</span><span class="o">:</span> <span class="s2">&quot;Ok&quot;</span><span class="p">,</span>
  <span class="s2">&quot;data&quot;</span><span class="o">:</span> <span class="nx">Blob</span> <span class="c1">// Here, the attachment content</span>
<span class="p">}</span>
</pre></div>
</div>
</td>
</tr>
<tr class="row-even"><td>No option</td>
<td>allDocs</td>
<td><div class="first last highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;result&quot;</span><span class="o">:</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span>
  <span class="s2">&quot;method&quot;</span><span class="o">:</span> <span class="s2">&quot;allDocs&quot;</span><span class="p">,</span>
  <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_doc_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;status&quot;</span><span class="o">:</span> <span class="mi">200</span><span class="p">,</span>
  <span class="s2">&quot;statusText&quot;</span><span class="o">:</span> <span class="s2">&quot;Ok&quot;</span><span class="p">,</span>
  <span class="s2">&quot;data&quot;</span><span class="o">:</span>  <span class="p">{</span>
    <span class="s2">&quot;total_rows&quot;</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span>
    <span class="s2">&quot;rows&quot;</span><span class="o">:</span> <span class="p">[{</span>
      <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;mydoc&quot;</span><span class="p">,</span>
      <span class="s2">&quot;key&quot;</span><span class="o">:</span> <span class="s2">&quot;mydoc&quot;</span><span class="p">,</span> <span class="c1">// optional</span>
      <span class="s2">&quot;value&quot;</span><span class="o">:</span> <span class="p">{},</span>
    <span class="p">}]</span>
  <span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
</td>
</tr>
<tr class="row-odd"><td>include_docs: true</td>
<td>allDocs</td>
<td><div class="first last highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;result&quot;</span><span class="o">:</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span>
  <span class="s2">&quot;method&quot;</span><span class="o">:</span> <span class="s2">&quot;allDocs&quot;</span><span class="p">,</span>
  <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;my_doc_id&quot;</span><span class="p">,</span>
  <span class="s2">&quot;status&quot;</span><span class="o">:</span> <span class="mi">200</span><span class="p">,</span>
  <span class="s2">&quot;statusText&quot;</span><span class="o">:</span> <span class="s2">&quot;Ok&quot;</span><span class="p">,</span>
  <span class="s2">&quot;data&quot;</span><span class="o">:</span>  <span class="p">{</span>
    <span class="s2">&quot;total_rows&quot;</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span>
    <span class="s2">&quot;rows&quot;</span><span class="o">:</span> <span class="p">[{</span>
      <span class="s2">&quot;id&quot;</span><span class="o">:</span> <span class="s2">&quot;mydoc&quot;</span><span class="p">,</span>
      <span class="s2">&quot;key&quot;</span><span class="o">:</span> <span class="s2">&quot;mydoc&quot;</span><span class="p">,</span> <span class="c1">// optional</span>
      <span class="s2">&quot;value&quot;</span><span class="o">:</span> <span class="p">{},</span>
      <span class="s2">&quot;doc&quot;</span><span class="o">:</span> <span class="p">{</span>
        <span class="c1">// Here, &quot;mydoc&quot; metadata</span>
      <span class="p">}</span>
    <span class="p">}]</span>
  <span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
<p>In case of error, the errorCallback first parameter will look like:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;result&quot;</span><span class="o">:</span> <span class="s2">&quot;error&quot;</span><span class="p">,</span>
  <span class="s2">&quot;method&quot;</span><span class="o">:</span> <span class="s2">&quot;get&quot;</span><span class="p">,</span>
  <span class="s2">&quot;status&quot;</span><span class="o">:</span> <span class="mi">404</span><span class="p">,</span>
  <span class="s2">&quot;statusText&quot;</span><span class="o">:</span> <span class="s2">&quot;Not Found&quot;</span><span class="p">,</span>
  <span class="s2">&quot;error&quot;</span><span class="o">:</span> <span class="s2">&quot;not_found&quot;</span><span class="p">,</span>
  <span class="s2">&quot;reason&quot;</span><span class="o">:</span> <span class="s2">&quot;document missing&quot;</span><span class="p">,</span>
  <span class="s2">&quot;message&quot;</span><span class="o">:</span> <span class="s2">&quot;Unable to get the requseted document&quot;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<div class="section" id="example-how-to-store-a-video-on-localstorage">
<h2>Example: How to store a video on localStorage<a class="headerlink" href="#example-how-to-store-a-video-on-localstorage" title="Permalink to this headline">¶</a></h2>
<p>The following shows how to create a new jIO in localStorage and then post a document with two attachments.</p>
<div class="highlight-javascript"><div class="highlight"><pre><span class="c1">// create a new jIO</span>
<span class="kd">var</span> <span class="nx">jio_instance</span> <span class="o">=</span> <span class="nx">jIO</span><span class="p">.</span><span class="nx">newJio</span><span class="p">({</span>
  <span class="s2">&quot;type&quot;</span><span class="o">:</span> <span class="s2">&quot;local&quot;</span><span class="p">,</span>
  <span class="s2">&quot;username&quot;</span><span class="o">:</span> <span class="s2">&quot;usr&quot;</span><span class="p">,</span>
  <span class="s2">&quot;application_name&quot;</span><span class="o">:</span><span class="s2">&quot;app&quot;</span>
<span class="p">});</span>
<span class="c1">// post the document &quot;metadata&quot;</span>
<span class="nx">jio_instance</span><span class="p">.</span><span class="nx">post</span><span class="p">({</span>
  <span class="s2">&quot;title&quot;</span>       <span class="o">:</span> <span class="s2">&quot;My Video&quot;</span><span class="p">,</span>
  <span class="s2">&quot;type&quot;</span>        <span class="o">:</span> <span class="s2">&quot;MovingImage&quot;</span><span class="p">,</span>
  <span class="s2">&quot;format&quot;</span>      <span class="o">:</span> <span class="s2">&quot;video/ogg&quot;</span><span class="p">,</span>
  <span class="s2">&quot;description&quot;</span> <span class="o">:</span> <span class="s2">&quot;Images Compilation&quot;</span>
<span class="p">},</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">var</span> <span class="nx">id</span><span class="p">;</span>
  <span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Error posting the document meta&#39;</span><span class="p">);</span>
  <span class="p">}</span>
  <span class="nx">id</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">id</span><span class="p">;</span>
  <span class="c1">// post a thumbnail attachment</span>
  <span class="nx">jio_instance</span><span class="p">.</span><span class="nx">putAttachment</span><span class="p">({</span>
    <span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="nx">id</span><span class="p">,</span>
    <span class="s2">&quot;_attachment&quot;</span><span class="o">:</span> <span class="s2">&quot;thumbnail&quot;</span><span class="p">,</span>
    <span class="s2">&quot;_data&quot;</span><span class="o">:</span> <span class="nx">my_image</span><span class="p">,</span>
    <span class="s2">&quot;_mimetype&quot;</span><span class="o">:</span> <span class="s2">&quot;image/jpeg&quot;</span>
  <span class="p">},</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
      <span class="k">return</span> <span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Error attaching thumbnail&#39;</span><span class="p">);</span>
    <span class="p">}</span>
    <span class="c1">// post video attachment</span>
    <span class="nx">jio_instance</span><span class="p">.</span><span class="nx">putAttachment</span><span class="p">({</span>
      <span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="nx">id</span><span class="p">,</span>
      <span class="s2">&quot;_attachment&quot;</span><span class="o">:</span> <span class="s2">&quot;video&quot;</span><span class="p">,</span>
      <span class="s2">&quot;_data&quot;</span><span class="o">:</span> <span class="nx">my_video</span><span class="p">,</span>
      <span class="s2">&quot;_mimetype&quot;</span><span class="o">:</span><span class="s2">&quot;video/ogg&quot;</span>
    <span class="p">},</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">return</span> <span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Error attaching the video&#39;</span><span class="p">);</span>
      <span class="p">}</span>
      <span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Video Stored&#39;</span><span class="p">);</span>
    <span class="p">});</span>
  <span class="p">});</span>
<span class="p">});</span>
</pre></div>
</div>
<p>localStorage contents:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span class="p">{</span>
  <span class="s2">&quot;jio/local/usr/app/12345678-1234-1234-1234-123456789012&quot;</span><span class="o">:</span> <span class="p">{</span>
    <span class="s2">&quot;_id&quot;</span><span class="o">:</span> <span class="s2">&quot;12345678-1234-1234-1234-123456789012&quot;</span><span class="p">,</span>
    <span class="s2">&quot;title&quot;</span><span class="o">:</span> <span class="s2">&quot;My Video&quot;</span><span class="p">,</span>
    <span class="s2">&quot;type&quot;</span><span class="o">:</span> <span class="s2">&quot;MovingImage&quot;</span><span class="p">,</span>
    <span class="s2">&quot;format&quot;</span><span class="o">:</span> <span class="s2">&quot;video/ogg&quot;</span><span class="p">,</span>
    <span class="s2">&quot;description&quot;</span><span class="o">:</span> <span class="s2">&quot;Images Compilation&quot;</span><span class="p">,</span>
    <span class="s2">&quot;_attachments&quot;</span><span class="o">:</span><span class="p">{</span>
      <span class="s2">&quot;thumbnail&quot;</span><span class="o">:</span><span class="p">{</span>
        <span class="s2">&quot;digest&quot;</span><span class="o">:</span> <span class="s2">&quot;md5-3ue...&quot;</span><span class="p">,</span>
        <span class="s2">&quot;content_type&quot;</span><span class="o">:</span> <span class="s2">&quot;image/jpeg&quot;</span><span class="p">,</span>
        <span class="s2">&quot;length&quot;</span><span class="o">:</span> <span class="mi">17863</span>
      <span class="p">},</span>
      <span class="s2">&quot;video&quot;</span><span class="o">:</span><span class="p">{</span>
        <span class="s2">&quot;digest&quot;</span><span class="o">:</span> <span class="s2">&quot;md5-0oe...&quot;</span><span class="p">,</span>
        <span class="s2">&quot;content_type&quot;</span><span class="o">:</span> <span class="s2">&quot;video/ogg&quot;</span><span class="p">,</span>
        <span class="s2">&quot;length&quot;</span><span class="o">:</span> <span class="mi">2840824</span>
      <span class="p">}</span>
    <span class="p">}</span>
  <span class="p">},</span>
  <span class="s2">&quot;jio/local/usr/app/myVideo/thumbnail&quot;</span><span class="o">:</span> <span class="s2">&quot;/9j/4AAQSkZ...&quot;</span><span class="p">,</span>
  <span class="s2">&quot;jio/local/usr/app/myVideo/video&quot;</span><span class="o">:</span> <span class="s2">&quot;...&quot;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="index.html">
              <img class="logo" src="_static/jio.png" alt="Logo"/>
            </a></p>
  <h3><a href="index.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">How to manage documents?</a><ul>
<li><a class="reference internal" href="#what-is-a-document">What is a document?</a></li>
<li><a class="reference internal" href="#basic-methods">Basic Methods</a></li>
<li><a class="reference internal" href="#promises">Promises</a></li>
<li><a class="reference internal" href="#method-options-and-callback-responses">Method Options and Callback Responses</a></li>
<li><a class="reference internal" href="#example-how-to-store-a-video-on-localstorage">Example: How to store a video on localStorage</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="download.html"
                        title="previous chapter">Downloads</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="revision_storages.html"
                        title="next chapter">Revision Storages: Conflicts and Resolution</a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="_sources/manage_documents.txt"
           rel="nofollow">Show Source</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="revision_storages.html" title="Revision Storages: Conflicts and Resolution"
             >next</a> |</li>
        <li class="right" >
          <a href="download.html" title="Downloads"
             >previous</a> |</li>
        <li><a href="index.html">JIO 2.0.0 documentation</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2013, Nexedi.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
    </div>
  </body>
</html>