| {% include anchor.html edit="true" title="Get an attachment" hash="get_attachment" %} | |
| {% highlight js %} | |
| db.getAttachment(docId, attachmentId, [options], [callback]) | |
| {% endhighlight %} | |
| Get attachment data. | |
| ### Options | |
| * `options.rev`: as with [get()](#fetch_document), you can pass a `rev` in and get back an attachment for the document at that particular revision. | |
| #### Example Usage: | |
| Get an attachment with filename `'att.txt'` from document with ID `'doc'`: | |
| {% include code/start.html id="get_att1" type="callback" %} | |
| {% highlight js %} | |
| db.getAttachment('doc', 'att.txt', function(err, blobOrBuffer) { | |
| if (err) { return console.log(err); } | |
| // handle result | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="get_att1" type="async" %} | |
| {% highlight js %} | |
| try { | |
| var blobOrBuffer = await db.getAttachment('doc', 'att.txt'); | |
| } catch (err) { | |
| console.log(err); | |
| } | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="get_att1" type="promise" %} | |
| {% highlight js %} | |
| db.getAttachment('doc', 'att.txt').then(function (blobOrBuffer) { | |
| // handle result | |
| }).catch(function (err) { | |
| console.log(err); | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| Get an attachment with filename `'att.txt'` from document with ID `'doc'`, at | |
| the revision `'1-abcd'`: | |
| {% include code/start.html id="get_att2" type="callback" %} | |
| {% highlight js %} | |
| db.getAttachment('doc', 'att.txt', {rev: '1-abcd'}, function(err, blobOrBuffer) { | |
| if (err) { return console.log(err); } | |
| // handle result | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="get_att2" type="async" %} | |
| {% highlight js %} | |
| try { | |
| var blobOrBuffer = await db.getAttachment('doc', 'att.txt', {rev: '1-abcd'}); | |
| } catch (err) { | |
| console.log(err); | |
| } | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="get_att2" type="promise" %} | |
| {% highlight js %} | |
| db.getAttachment('doc', 'att.txt', {rev: '1-abcd'}).then(function (blobOrBuffer) { | |
| // handle result | |
| }).catch(function (err) { | |
| console.log(err); | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| #### Response type: | |
| The response will be a `Blob` object in the browser, and a `Buffer` object in Node.js. See [blob-util](https://github.com/nolanlawson/blob-util) for utilities to transform `Blob`s to other formats, such as base64-encoded strings, data URLs, array buffers, etc. | |
| #### Inline base64 attachments | |
| You can specify `{attachments: true}` to most "read" operations, such as `get()`, `allDocs()`, `changes()`, and `query()`. The attachment data will then be included inlined in the resulting doc(s). However, it will always be supplied as base64. For example: | |
| {% highlight js %} | |
| { | |
| "_attachments": { | |
| "att.txt": { | |
| "content_type": "text/plain", | |
| "digest": "d5ccfd24a8748bed4e2c9a279a2b6089", | |
| "data": "SXMgdGhlcmUgbGlmZSBvbiBNYXJzPw==" | |
| } | |
| }, | |
| "_id": "mydoc", | |
| "_rev": "1-e147d9ec9c85139dfe7e93bc17148d1a" | |
| } | |
| {% endhighlight %} | |
| For such APIs, when you don't specify `{attachments: true}`, you will instead get metadata about the attachments. For example: | |
| {% highlight js %} | |
| { | |
| "_attachments": { | |
| "att.txt": { | |
| "content_type": "text/plain", | |
| "digest": "d5ccfd24a8748bed4e2c9a279a2b6089", | |
| "stub": true | |
| } | |
| }, | |
| "_id": "mydoc", | |
| "_rev": "1-e147d9ec9c85139dfe7e93bc17148d1a" | |
| } | |
| {% endhighlight %} | |
| This "summary" operation may be faster in some cases, because the attachment itself does not need to be read from disk. |